{"version":3,"sources":["services/userServiceFlp.ts","components/Dialogs/Dialogs.module.scss","components/shared/Molecules/SearchBar/SearchBar.module.scss","components/Login/Login.module.scss","components/shared/Organisms/exchangeLabForm/ExchangeLabForm.module.scss","components/PageHeader/PageHeader.module.scss","components/shared/Molecules/AddressField/AddressField.module.scss","components/MemberConf/QuickConnectPartners/AdminQuickConnectPartners/AdminQuickConnectPartners.module.scss","components/MemberConf/CasesList/CasesList.module.scss","shared/Wait.tsx","shared/enums/RecordStatus.ts","components/Dialogs/index.tsx","components/MemberConf/QuickConnectPartners/MemberQuickConnectPartners/MemberQuickConnectPartners.module.scss","components/Dialogs/ConfirmDisableDialog/ConfirmDisableDialog.module.scss","components/Dialogs/ConfirmDeleteDialog/ConfirmDeleteDialog.module.scss","components/MemberConf/Members/Members.module.scss","shared/enums/UserRole.ts","components/MemberConf/ExchangeLabConf/ExchangeLabConf.module.scss","page/Practice/Practice.module.scss","page/Device/Device.module.scss","services/appConfigService.ts","shared/useDialogState.ts","assets/images/indications/ico-GeneralWarning.svg","services/api/http.ts","components/Tables/DenseTable/DenseTable.module.scss","components/shared/Atoms/InputForm/InputForm.module.scss","shared/enums/DialogType.ts","components/App/App.module.scss","components/Dialogs/AddEditUserFlpDialog/index.tsx","components/Dialogs/AddEditMemberDialog/AddMemberDialog.module.scss","components/shared/Organisms/PracticeForm/PracticeForm.module.scss","components/PageFooter/PageFooter.module.scss","shared/enums/AppType.ts","services/authService/MsalContainer.tsx","services/authService/index.tsx","components/Tables/DenseTable/index.tsx","assets/images/premium.svg","components/Dialogs/ConfirmDisableDialog/index.tsx","components/Dialogs/AddEditUserFlpDialog/AddEditUserFlpDialog.module.scss","components/UserConfFlp/UserConfFlp.module.scss","components/shared/Atoms/Dialog/Dialog.module.scss","components/shared/Organisms/DeviceForm/DeviceForm.module.scss","components/Dialogs/CustomizedDialog.module.scss","components/MemberConf/PracticeCases/PracticeCases.module.scss","page/TermsOfUse/TermsOfUse.module.scss","services/memberServiceFlp.ts","shared/utils/utils.ts","components/MemberConf/Dashboard/dashboard.module.scss","shared/ErrorBoundary.tsx","components/App/AppErrorBoundary.tsx","shared/useAppConfig.tsx","assets/images/dexis-logo.png","assets/images/beta.svg","components/Dialogs/AppInfoDialog/AppInfoDialog.tsx","services/userService.ts","i18n.ts","components/PageHeader/PageHeader.tsx","components/Login/index.tsx","assets/images/home/device-list.svg","assets/images/home/device-list-white.svg","assets/images/home/member-configuration.svg","assets/images/home/member-configuration-white.svg","assets/images/home/user-details.svg","assets/images/home/user-details-white.svg","assets/images/help.svg","components/UserConfFlp/index.tsx","shared/enums/TagsInputType.ts","components/TagsInput/index.tsx","components/Dialogs/AddEditMemberDialog/index.tsx","components/Dialogs/ConfirmDeleteDialog/index.tsx","components/shared/Atoms/InputForm/InputForm.tsx","components/shared/Atoms/InputForm/index.ts","components/shared/Atoms/Dialog/index.ts","components/shared/Atoms/Dialog/Dialog.tsx","components/shared/Molecules/SearchBar/SearchBar.tsx","components/shared/Molecules/SearchBar/index.ts","shared/enums/CountryCode.ts","components/shared/Molecules/AddressField/AddressField.tsx","components/shared/Molecules/AddressField/index.ts","components/shared/Organisms/DeviceForm/DeviceForm.tsx","components/shared/Organisms/DeviceForm/index.ts","components/shared/Organisms/PracticeForm/PracticeForm.tsx","components/shared/Organisms/PracticeForm/index.ts","services/labExchangeService.ts","redux/selector/user/index.ts","redux/selector/exchangeLab/index.ts","components/shared/Organisms/exchangeLabForm/ExchangeLabForm.tsx","components/shared/Organisms/exchangeLabForm/index.ts","components/MemberConf/Members/index.tsx","components/Dialogs/CustomizedDialog.tsx","components/Context/AlertContext.tsx","components/MemberConf/ExchangeLabConf/index.tsx","assets/images/advanced.svg","services/quickConnectPartnersService.ts","assets/images/indications/ico-ApplianceFalse.svg","assets/images/indications/ico-ApplianceTrue.svg","assets/images/indications/ico-DentureFalse.svg","assets/images/indications/ico-DentureTrue.svg","assets/images/indications/ico-GuidedSurgeryFalse.svg","assets/images/indications/ico-GuidedSurgeryTrue.svg","assets/images/indications/ico-OrthodonticFalse.svg","assets/images/indications/ico-OrthodonticTrue.svg","assets/images/indications/ico-RestorativeAndImplantFalse.svg","assets/images/indications/ico-RestorativeAndImplantTrue.svg","assets/images/indications/ico-SleepDentistryFalse.svg","assets/images/indications/ico-SleepDentistryTrue.svg","enum/FleetPortalMode/Indications.ts","components/MemberConf/QuickConnectPartners/AdminQuickConnectPartners/index.tsx","components/MemberConf/QuickConnectPartners/MemberQuickConnectPartners/index.tsx","redux/type/practices.ts","redux/type/exchangeLab.ts","redux/reducer/address.ts","redux/type/device.ts","redux/reducer/practices.ts","redux/type/user.ts","redux/reducer/user.ts","redux/reducer/device.ts","redux/reducer/exchangeLab.ts","redux/reducer/index.ts","redux/store.ts","services/api/request.ts","services/api/practices/getPractice.ts","services/api/getParams.ts","services/api/practices/addPractice.ts","redux/selector/practices/index.ts","services/api/practices/updatePractice.ts","services/api/practices/deletePractice.ts","redux/action/practices.ts","page/Practice/Practice.tsx","page/Practice/index.ts","services/deviceService.ts","services/labExchangeDeviceService.ts","api/practices.ts","api/members.ts","components/Dialogs/EditDeviceFlpDialog/index.tsx","redux/selector/devices/index.ts","services/api/device/getDevices.ts","services/api/device/updateDevice.ts","page/Device/Device.tsx","page/Device/index.ts","services/api/connectCase/index.ts","components/MemberConf/CasesList/index.tsx","components/MemberConf/PracticeCases/index.tsx","components/MemberConf/Dashboard/index.tsx","components/Navigation/VerticalMenu.tsx","services/api/user/getMemberId.ts","components/Home/index.tsx","components/PageFooter/PageFooter.tsx","page/TermsOfUse/index.tsx","components/App/Routes.tsx","theme.tsx","components/App/index.tsx","reportWebVitals.ts","index.tsx","services/authService/msalClient.ts"],"names":["userFlp","recordId","firstName","surname","emailAddress","role","UserRole","NOT_SET","setInstanceUserFLP","data","getInstanceUserFLP","getUsersFlpAsync","async","url","getLoadedConfig","oDataUrl","includeInactive","concat","RecordStatus","ACTIVE","http","get","addUserAsyncFlp","post","value","updateUserAsyncFlp","put","deleteUserAsyncFlp","delete","module","exports","Text","_ref","text","_jsx","style","textAlign","padding","children","Wait","_ref2","leftOtTopText","rightOrBottomText","useVerticalLayout","showBorder","innerStyle","useMemo","height","width","borderRadius","border","undefined","boxShadow","flexDirection","background","_jsxs","className","Dialogs","props","isOpen","onDialogClosed","title","content","editIndex","editData","appType","dialogType","validated","errorMessage","setErrorMessage","React","useState","successMessage","setSuccessMessage","isLoading","setIsLoading","t","useTranslation","handleAdd","DialogType","ADD_MEMBER","member","getMemberFLP","name","user","userReference","addMemberAsyncFlp","then","result","catch","e","console","log","message","finally","ADD_USERFLP","error","handleEdit","EDIT_USERFLP","EDIT_MEMBER","updateMemberAsyncFlp","handleDelete","AppType","USERSFLP","_","MEMBERS","deleteMemberAsyncFlp","handleDisable","Dialog","open","onClose","disableBackdropClick","disableEscapeKeyDown","DialogTitle","id","Box","fontWeight","fontSize","Alert","severity","DialogContent","minWidth","DialogActions","justifyContent","margin","type","_Fragment","css","cancel","Button","onClick","variant","confirm","disabled","CircularProgress","size","color","APPLICATION_INFO","CONFIRM_DISABLE_DIALOG","CONFIRM_DELETE","renderDialogContentByType","AppConfig","constructor","json","apiUrl","buildVersion","git_commit","version","release_date","FLPOptEnableUserManagement","this","dataUrl","UrlAssembler","segment","loadedConfig","configFileName","configUrl","configLoaderPromise","configResponse","axios","Error","internalLoadConfig","loadConfig","useDialogState","initiallyOpen","arguments","length","setIsOpen","useCallback","HttpError","statusCode","super","create","interceptors","request","use","_config$headers2","config","method","headers","Authorization","authResponse","_authResponse","msalClient","getMsalClient","account","getLoggedInUser","scopes","userStandard","acquireTokenSilent","assert","accessToken","_config$headers","setRequestBearerToken","response","_error$config","_error$config$params","status","code","params","notThrowError","isRetry","_error$response","_error$response$data","_error$response2","_error$response2$data","prefix","errorResponse","Message","ExceptionType","ExceptionMessage","isServerException","isServerApiError","detail","_error$response3","_error$response3$data","_error$response4","_error$response4$data","throwHttpError","AddEditDealerDialog","editRowData","setFirstName","setSurname","setEmailAddress","emailInvalidText","setEmailInvalidText","setRole","useEffect","isEmail","addEditUserFlp","htmlFor","defaultValue","onChange","target","placeholder","onBlur","selected","MEMBER_MANAGER","FLP_ADMINISTRATOR","FLP_SUPPORT","MsalContainer","authService","logMessages","instance","inProgress","useMsal","setLoggedInUser","callbackId","addEventCallback","event","eventType","interactionType","consoleTextStyles","Title","Unset","EventType","LOGIN_START","LOGOUT_START","LOGIN_SUCCESS","payload","LOGIN_FAILURE","groupCollapsed","groupEnd","removeEventCallback","InteractionStatus","None","accountIdentifierKey","accountInfoKey","getCurrentAccountId","throwIfNotFound","sessionStorage","getItem","accountId","getAccountByHomeId","getUserAccount","JSON","parse","req","setItem","stringify","BaseAuthService","login","authRequest","performCSDLogin","csdLoginRequest","loginRequest","loginRedirect","logout","logoutRedirect","homeAccountId","removeItem","isAuthorizedUser","recordStatus","getUserId","getUserReference","isUserRole","userRole","isLoggedIn","FleetPortalAuthService","getUserReferences","getUserAvatar","slice","toUpperCase","getDisplayName","getUserRole","RoleManager","isTTSBarcelona","context","createContext","AuthServiceProvider","instanceAutService","Provider","MsalProvider","UnauthenticatedTemplate","MsalUnauthenticatedTemplate","AuthenticatedTemplate","_ref3","MsalAuthenticatedTemplate","useAuthService","ctx","useContext","DenseTable","columns","rows","totalCount","pageNumber","itemPerPage","close","rowData","setRowData","recordCount","setRecordCount","setEditRowData","editRowIndex","setEditRowIndex","rowIndex","setRowIndex","setValidated","fieldConflictError","setFieldConflictError","setDialogType","setTitle","setUserRole","ConfirmDisableDialog","AddEditUserFlpDialog","handleDialogClose","cancelled","push","splice","fetchUserRole","AddIcon","classes","nbResult","confirmDisable","display","TableContainer","component","Paper","Table","stickyHeader","TableHead","TableRow","map","column","TableCell","align","src","premiumLogo","alt","label","TableBody","row","index","hover","tableRow","tabIndex","activationDate","eval","GeneralWarning","generalWarning","header","body","invite","updateRecordId","memberRecordId","updateUserRecordId","userRecordId","updateMembersNameFlp","updateUserFirstNameFlp","userFirstName","updateUserSurnameFlp","userSurname","updateEmailFLP","email","updateMembersUserReferenceFlp","BuildUserReference","getMembersFlpAsync","start","memberPerPage","searchValue","query","toLowerCase","getMembersList","_req$data","licenceKeysRegex","licenseKey","test","CustomerRefRegex","sapAccount","FormatDateMMYYYY","aDate","Date","toLocaleDateString","day","month","year","input_userReference","init_userReference","output_userReference","references","split","trim","join","ConvertArrayReferences","ErrorBoundary","PureComponent","state","componentDidCatch","errorInfo","setState","render","maxWidth","Content","marginTop","window","location","reload","AppErrorBoundary","configContext","AppConfigProvider","setConfig","useAppConfig","AppInfoDialog","backendVersion","setBackendVersion","URL","toString","origin","build","getBackendVersionAsync","ml","paddingLeft","resources","en","translation","fr","i18n","initReactI18next","init","lng","interpolation","escapeValue","langArray","codeLang","Header","_langArray$find","anchorEl","setAnchorEl","userDisplayName","setUserDisplayName","lang","setLang","find","i18next","resolvedLanguage","userAvatar","setUserAvatar","openBoolean","Boolean","avatar","displayName","fetchUserDetails","showAppInfoDialog","setShowAppInfoDialog","pageHeader","Link","to","logo","betaLogo","currentTarget","Avatar","Menu","anchorOrigin","vertical","horizontal","keepMounted","transformOrigin","handleClose","MenuItem","ListItemIcon","PersonIcon","Divider","InfoIcon","ExitToAppIcon","FormControl","NativeSelect","selectEmpty","_langArray$find2","changeLanguage","Login","isEmployeeLogin","doLogin","landingBackground","logoLandingStyle","betaLogoLandingStyle","floatLandingContainer","floatLandingChild","textLandingStyle","loginLandingBtn","startIcon","globImage","usersFlpColumns","UsersFlpConf","setLoading","rowsData","setRowsData","usersRows","root","TagsInputType","TagsInput","initValues","onValueChange","licenceType","tagsInit","tags","setTags","inputValue","setInputValue","setError","errorLicenceKeys","setErrorLicenceKeys","errorCustomerRefs","setErrorCustomerRefs","errorText","LICENCE_KEYS","helpText","removeTag","isLicenceKeyType","newTags","newErrorLicenceKeys","newErrorCustomerRefs","pos","findIndex","val","hasError","validateInputs","newSelectedItem","includes","Set","forEach","v","SAP_ACCOUNT","tag","backgroundColor","onKeyDown","key","preventDefault","AddEditMemberDialog","_member$user","_member$user2","_member$user3","membersName","setMembersName","userEmail","setUserEmail","setUserFirstName","setUserSurname","setUserReference","localValidated","setLocalValidated","tagsinputValidated","setTagsinputValidated","_member$user4","addMember","customerRef","values","ConfirmDeleteDialog","deletedData","closeDialog","confirmDelete","InputForm","localValue","setValueLabel","styles","container","field","DialogMui","dialogContent","SearchBar","buttonLabel","tooltipText","onRequestSearch","onCancelSearch","inputRef","useRef","setValue","handleCancel","handleRequestSearch","charCode","Tooltip","placement","textOverflow","overflow","paper","searchContainer","Input","onKeyUp","fullWidth","searchInput","disableUnderline","IconButton","classNames","iconButton","searchIconButton","iconButtonHidden","SearchIcon","ClearIcon","CountryCode","AddressField","address","addressLocal","setAddressLocal","handleOnChange","line1","newLine","containerHorizontal","city","newCity","region","newRegion","zip","newZip","Select","country","displayEmpty","Object","entries","sort","a","b","localeCompare","item","DeviceForm","device","setOpen","saveRequest","members","setMembers","localDevice","setDevice","isChange","setIsChange","m","prevMemberId","ref","current","usePrevious","memberId","memberInfo","it","serialNumbers","Autocomplete","options","getOptionLabel","option","updateValue","reason","details","newDevice","renderInput","TextField","PracticeForm","practice","practiceLocal","setPractice","validate","setValidate","validateEmail","String","match","newPractice","newValue","FormatAddress","line2","line3","postCode","countryCode","getName","getExchangeLabsForMemberAsync","userId","numberOfLab","_countryCode","getCode","getAllExchangeLabsForMemberAsync","res","count","countReal","promises","step","i","Promise","all","results","getMemberId","_req$data$value$","queryMemberId","unassignLabsAsync","nameLabId","queryAssign","partnersIds","aq","assignLabsAsync","emailAdress","_memberId","labId","reqPartner","_reqPartner","_reqPartner$data","_reqPartner$data$valu","queryPartnerId","reject","getExchangeLabsFilteredAsync","emailSearch","nameSearch","getExchangeLabsAsync","_countryCode2","addExchangeLabAsyncFlp","partnerType","enable","selectUser","selectListExhangeLab","createSelector","exchangeLab","listExchangeLabs","exchangeLabs","listPractices","echangeLab","addressId","ExchangeLabForm","add","loading","labName","setLabName","labNames","setLabNames","labEmails","setLabEmails","exchangeLabsForMember","setExchangeLabsForMember","setExchangeLabs","addressSource","setAddressSource","loadingOtpion","setLoadingOtpion","lock","setLock","setAddress","useSelector","ID","labs","allPartners","_filteredPartners","_filteredPartners2","filteredPartners","_allPartners$value","filter","allPartner","assignPartner","labModel","_labModel$address$lin","_labModel$address","_labModel$address$cit","_labModel$address2","_labModel$address$reg","_labModel$address3","_labModel$address$pos","_labModel$address4","_labModel$address$cou","_labModel$address5","prevAddressSource","clearAddress","_labModel$address$lin2","_labModel$address6","_labModel$address$cit2","_labModel$address7","_labModel$address$reg2","_labModel$address8","_labModel$address$pos2","_labModel$address9","_labModel$address$cou2","_labModel$address10","_addressSource$line","_addressSource$city","_addressSource$zip","_addressSource$countr","_addressSource$region","resetField","exchangeLabDialog","autocomplete","freeSolo","disableClearable","onInputChange","getOptionSelected","input","InputProps","Validated","Members","_t","setDialogContent","dialogTitle","setDialogTitle","selectedIndex","setSelectedIndex","memberCount","setMemberCount","currentPage","setCurrentPage","setSearchValue","setUserId","handleChange","button","unshift","_row$user","_row$user2","_row$user3","scope","paddingRight","EditIcon","DeleteIcon","LinearProgress","Pagination","Math","ceil","shape","defaultPage","page","pagination","CustomizedDialog","openDialog","AlertContext","AlertContextProvider","alertMessage","setAlertMessage","alertErrorMessage","setAlertErrorMessage","alertSeverity","setAlertSeverity","isOpenAlert","setOpenAlert","isButtonDisabled","setButtonDisabled","memorizedAlertContextValue","useAlertContext","alertContext","ExchangeLabList","labPerPage","labRows","setLabRows","isLabLoading","setLabLoading","labCount","setLabCount","setMemberId","setOpenDialog","isAddExLabLoading","setAddExLabLoading","aRole","processResponseFLP","closeDialogBackGroundWork","msg","isAddingLabEx","isOpenModal","lab","actions","resultAssign","newLab","getQuickConnectPartners","_res$data","parseInt","getMemberQuickConnectPartners","_res$data2","Indications","toTooltip","indication","RESTORE_IMPLANT","GUIDED_SURGERY","ORTHODONTICS","SLEEP","DENTURE","APPLIANCE","toIcon","allowed","RestorativeAndImplantTrue","RestorativeAndImplantFalse","GuidedSurgeryTrue","GuidedSurgeryFalse","OrthodonticTrue","OrthodonticFalse","SleepDentistryTrue","SleepDentistryFalse","DentureTrue","DentureFalse","ApplianceTrue","ApplianceFalse","AdminQuickConnectPartners","csdQuickConnectPartners","setCsdQuickConnectPartners","isQCPLoading","setQCPLoading","setCount","createIndicationsForPartner","partner","displayedIndications","translatedTooltipText","indications","indicationLogo","csdQuickConnectPartner","_csdQuickConnectPartn","_csdQuickConnectPartn2","Grid","justify","startsWith","advanced","countriesCell","countries","Switch","checked","MemberQuickConnectPartners","memberQuickConnectPartners","setMemberQuickConnectPartners","memberQuickConnectPartner","_memberQuickConnectPa","_memberQuickConnectPa2","_memberQuickConnectPa3","GET_PRACTICES_SUCCESS","ADD_PRACTICES_SUCCESS","UPDATE_PRACTICES_SUCCESS","RESET_DELETE_ERROR","RESET_ADD_ERROR","GET_EXCHANGE_LAB_SUCCESS","initialState","_countrySelected$0$co","countrySelected","GET_DEVICES","GET_DEVICES_SUCCESS","practices","pending","GET_USER_ID","GET_USER_ROLE","memberID","devices","listDevices","combineReducers","action","reduce","practiceRecordId","_action$data$value$","serialNumber","entityId","deviceType","practiceId","configuration","firstUseDate","lastUseDate","memberName","sapId","memberRef","store","createStore","rootReducer","composeWithDevTools","path","apiType","resolve","dispatch","baseApiPath","err","getPractices","getParams","expand","requestApi","addPractice","selectNbResult","pendingListPractices","errorMessageDeletePractice","errorMessageAddPractice","selectPractices","selectAddress","selectTablePractice","addressForm","selectPractice","updatePractice","getState","form","paramsRequest","RecordId","Name","EmailAddress","Address","Line1","Line2","Line3","City","Region","PostCode","deletePractice","resetErrorMessage","resetAddErrorMessage","nbPerPage","fieldsFilters","Practice","initForm","setPage","setFilter","openFormPractice","setOpenFormPractice","editFormPractice","setEditFormPractice","idSelected","setIdSelected","openDeleteDialog","setOpenDeleteDialog","tableData","errorMessageDelete","errorMessageAdd","useDispatch","top","skip","closeFormDialog","generateFilter","fields","fieldsString","add_bar","nb_result","_event","getMemberSerialNumbers","_req$data2","getAssociatedPartners","deviceConfigurationId","getMembers","EditDeviceFlpDialog","saveData","deviceId","exchangeLabsDevice","setExchangeLabsDevice","selectedLabs","setSelectedLabs","practiceList","setPracticeList","selectedPractice","setSelectedPractice","subMembersList","setSubMembersList","selectedSubMember","setSelectedSubMember","localErrorMessage","SetLocalErrorMessage","multiple","filterSelectedOptions","Stack","sx","pendingListDevices","selectTableDevices","formatLabsName","devicesConf","_devicesConf$map","_it$partner","getDevices","MEMBER_SUB_MANAGER","devicesValue","deviceList","_device$deviceConfigu","_device$deviceConfigu2","_device$deviceConfigu3","_device$deviceConfigu4","_device$deviceConfigu5","_device$deviceConfigu6","_device$deviceConfigu7","_device$deviceConfigu8","_device$deviceConfigu9","_device$deviceConfigu10","_device$deviceConfigu11","_device$deviceConfigu12","_device$deviceConfigu13","_device$deviceConfigu14","_device$deviceConfigu15","_device$deviceConfigu16","deviceConfiguration","partnerDevices","configRecordId","userRef","updateDevice","devicePerPage","Device","openDeviceForm","setOpenDeviceForm","editDeviceForm","setEditDeviceForm","isEditDeviceLoading","setEditDeviceLoading","editDevicemessageError","setEditDeviceMessageError","editDeviceExchangeLabsForMember","setEditDeviceExchangeLabsForMember","deviceCount","isDeviceLoading","deviceRows","closeDeviceForm","_row$practice","_row$practice2","_row$practice2$addres","_row$practice3","_row$practice3$addres","some","fontStyle","deviceConfigId","labsList","l","partnerId","reqData","addOrUpdateDeviceConfiguration","getCases","startDate","endDate","exportCases","CasesList","cases","setCases","casesCount","setCasesCount","paginate","getCasesList","download","createObjectURL","Blob","link","document","createElement","href","fileName","moment","format","setAttribute","appendChild","click","remove","startDownload","CloudDownloadOutlinedIcon","addressName","deviceSN","caseId","acquisitionDate","sentDate","downloadDate","laboratoryName","dentistLastName","PracticeCases","calendarVisible","setCalendarVisible","allUserDevices","setAllUserDevices","userDevices","setUserDevices","devicesStats","setDevicesStats","membersList","setMembersList","activeMembers","setActiveMembers","currentRange","startOf","toDate","endOf","displayedStartDate","displayedEndDate","localDateRange","currentDateRange","setDateRange","weeksRange","setWeeksRange","getDeviceCasesCount","sn","weekNumber","list","c","getWeeklyDownloadedCases","downloadWeekNumber","getWeeklyDevicesDownloadedCases","n","indexOf","getWeekTotal","week","total","d","refreshDashboard","filterCase","w","currentDate","firstDay","downloadedCases","distinctDevicesCount","refreshDevicesList","isActiveMember","uniqueMembers","Map","saveMembersList","fetchUserDevices","dateRange","ClickAwayListener","onClickAway","calendar","toggleCalendar","EditCalendarIcon","calendarPopup","calendarContainer","DateRangePicker","ranges","range","selection","rangeColors","editableDateInputs","moveRangeOnFirstSelection","months","direction","spacing","Chip","active","handleMemberClick","onDelete","handleMemberDelete","deleteIcon","countHeader","_row$deviceConfigurat","_row$deviceConfigurat2","_row$deviceConfigurat3","_row$deviceConfigurat4","_row$deviceConfigurat5","_row$deviceConfigurat6","_row$deviceConfigurat7","_row$deviceConfigurat8","countCell","totalCell","totalLabel","getTotalCases","chartContainer","ResponsiveContainer","LineChart","CartesianGrid","XAxis","dataKey","interval","tick","CustomizedAxisLabel","YAxis","allowDecimals","angle","position","Line","stroke","activeDot","r","BarChart","Bar","fill","barSize","x","y","transform","dy","textAnchor","Dashboard","devicesCases","setDevicesCases","labsCases","setLabsCases","deviceLabCases","setDeviceLabCases","indicationCases","setIndicationCases","pieActiveIndex","setPieActiveIndex","_d$deviceConfiguratio","_d$deviceConfiguratio2","_d$deviceConfiguratio3","_d$deviceConfiguratio4","names","laboratory","scatter","_d$deviceConfiguratio5","_d$deviceConfiguratio6","prac","addrName","caseType","indCases","COLORS","layout","strokeDasharray","maxBarSize","ScatterChart","allowDuplicatedCategory","ObliqueAxisLabel","ZAxis","cursor","Scatter","LabelList","PieChart","Pie","activeIndex","activeShape","renderActiveShape","cx","cy","innerRadius","outerRadius","onMouseEnter","onPieEnter","entry","Cell","RADIAN","PI","midAngle","startAngle","endAngle","percent","sin","cos","sy","mx","my","ex","ey","Sector","toFixed","TabPanel","other","hidden","p","a11yProps","VerticalTabs","setType","DEVICES","isFLPCsdAdmin","setIsFLPCsdAdmin","currentRole","setCurrentRole","fetchRole","Tabs","TabIndicatorProps","alignItems","orientation","Tab","icon","deviceListWhite","memberConfWhite","memberConf","LABEXCHANGE","userDetailsWhite","userDetails","DASHBOARD_OVERVIEW","AssessmentOutlinedIcon","help","flexItem","light","QUICK_CONNECT_PARTNERS","PRACTICE","DASHBOARD_PRACTICE_CASES","DASHBOARD_CASESLIST","Authorized","userID","Fragment","Loading","NotAuthorized","Home","isAuthorized","setIsAuthorized","fetchIsAuthorized","Footer","pageFooter","termsOfUseLink","TermsOfUse","mainLayout","NotLoggedIn","Route","Redirect","LoggedIn","home","PageHeader","DealerRoutes","theme","createTheme","palette","primary","main","secondary","components","MuiTooltip","styleOverrides","tooltip","MuiTable","MuiTableContainer","maxHeight","MuiTableRow","MuiTableCell","head","MuiFormControl","MuiFormControlLabel","MuiOutlinedInput","minHeight","MuiButton","defaultProps","disableRipple","textTransform","containedPrimary","marginLeft","MuiSwitch","switchBase","MuiCheckbox","MuiTextField","InputLabelProps","shrink","App","ThemeProvider","BrowserRouter","AppRoutes","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","__csd__","isSupportedBrowser","ReactDOM","I18nextProvider","getElementById","warn","navigator","userAgent","isProdEnv","process","_msalClient","prompt","extraQueryParameters","domain_hint","PublicClientApplication","auth","clientId","authority","loginDomain","tenantName","policies","knownAuthorities","navigateToLoginRequestUrl","redirectUri","cache","cacheLocation","BrowserCacheLocation","SessionStorage","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","containsPii","LogLevel","Warning","Info","info","Verbose","debug"],"mappings":"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","file":"static/js/main.88b5c5dc.chunk.js","sourcesContent":["import { UserRole } from \"../shared/enums/UserRole\";\r\nimport { IUserDataFlp } from \"../shared/interfaces/IUserDataFlp\";\r\nimport http from \"./api/http\";\r\nimport getLoadedConfig from \"./appConfigService\";\r\nimport { RecordStatus } from \"../shared/enums/RecordStatus\";\r\n\r\nexport interface IUserRequest {\r\n recordId: string;\r\n firstName: string;\r\n surname: string;\r\n emailAddress: string;\r\n role: string;\r\n}\r\n\r\nlet userFlp: IUserDataFlp = {\r\n recordId: \"\",\r\n firstName: \"\",\r\n surname: \"\",\r\n emailAddress: \"\",\r\n role: UserRole.NOT_SET,\r\n};\r\nexport const setInstanceUserFLP = (data: IUserDataFlp) => {\r\n userFlp = data;\r\n};\r\n\r\nexport const getInstanceUserFLP = () => {\r\n return userFlp;\r\n};\r\n\r\nexport const getUsersFlpAsync = async (\r\n includeInactive: boolean\r\n): Promise => {\r\n let url = getLoadedConfig().oDataUrl + \"Users\";\r\n\r\n // Filter by record status inorder to have only the active user\r\n if (!includeInactive)\r\n url += `/?$filter=(RecordStatus eq '${RecordStatus.ACTIVE}')`;\r\n\r\n const req = await http.get(url);\r\n\r\n return req.data[\"value\"] as IUserRequest[];\r\n};\r\n\r\nexport const addUserAsyncFlp = async (\r\n data: IUserRequest\r\n): Promise => {\r\n const req = await http.post(getLoadedConfig().oDataUrl + \"Users\", {\r\n firstName: data.firstName,\r\n surname: data.surname,\r\n emailAddress: data.emailAddress,\r\n role: data.role,\r\n });\r\n\r\n return req.data.value[0];\r\n};\r\n\r\nexport const updateUserAsyncFlp = async (\r\n data: IUserRequest\r\n): Promise => {\r\n const req = await http.put(\r\n getLoadedConfig().oDataUrl + `Users(${data.recordId})`,\r\n {\r\n recordId: data.recordId,\r\n firstName: data.firstName,\r\n surname: data.surname,\r\n emailAddress: data.emailAddress,\r\n role: data.role,\r\n }\r\n );\r\n\r\n return req.data.value[0];\r\n};\r\n\r\nexport const deleteUserAsyncFlp = async (\r\n recordId: string\r\n): Promise => {\r\n const req = await http.delete(\r\n getLoadedConfig().oDataUrl + `Users(${recordId})`\r\n );\r\n\r\n return req.data[\"value\"];\r\n};\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"confirm\":\"Dialogs_confirm__2E8VI\",\"cancel\":\"Dialogs_cancel__3HceX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"SearchBar_container__cBd1Y\",\"input\":\"SearchBar_input__1gbk7\",\"searchInput\":\"SearchBar_searchInput__1rHYF\",\"searchContainer\":\"SearchBar_searchContainer__2MEvV\",\"paper\":\"SearchBar_paper__26WWy\",\"iconButton\":\"SearchBar_iconButton__3Ry6I\",\"iconButtonHidden\":\"SearchBar_iconButtonHidden__3tmx0\",\"searchIconButton\":\"SearchBar_searchIconButton__gxFqV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"landingBackground\":\"Login_landingBackground__tYluq\",\"floatLandingContainer\":\"Login_floatLandingContainer__2OAR3\",\"floatLandingChild\":\"Login_floatLandingChild__1J4c0\",\"logoLandingStyle\":\"Login_logoLandingStyle__1WZvM\",\"betaLogoLandingStyle\":\"Login_betaLogoLandingStyle__ewTI1\",\"textLandingStyle\":\"Login_textLandingStyle__2OOiZ\",\"globImage\":\"Login_globImage__3CtW6\",\"loginLandingBtn\":\"Login_loginLandingBtn__2yvNO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"label\":\"ExchangeLabForm_label__1J9uE\",\"textField\":\"ExchangeLabForm_textField__2cVvM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pageHeader\":\"PageHeader_pageHeader__3XA5L\",\"logo\":\"PageHeader_logo__tS6kU\",\"betaLogo\":\"PageHeader_betaLogo__Qkb-L\",\"account\":\"PageHeader_account__BR-vL\",\"root\":\"PageHeader_root__LWl56\",\"title\":\"PageHeader_title__14WEp\",\"avatar\":\"PageHeader_avatar__4-Nig\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerHorizontal\":\"AddressField_containerHorizontal__1aXLi\",\"zip\":\"AddressField_zip__38ZkV\",\"country\":\"AddressField_country__GDO0R\",\"city\":\"AddressField_city__4WnZi\",\"region\":\"AddressField_region__4AkRI\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"AdminQuickConnectPartners_root__2OdmK\",\"nbResult\":\"AdminQuickConnectPartners_nbResult__3DjM_\",\"pagination\":\"AdminQuickConnectPartners_pagination__3o4pU\",\"logo\":\"AdminQuickConnectPartners_logo__v6Gwz\",\"indicationLogo\":\"AdminQuickConnectPartners_indicationLogo__1U1gM\",\"countriesCell\":\"AdminQuickConnectPartners_countriesCell__1YBmg\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"CasesList_root__1tSIx\",\"nbResult\":\"CasesList_nbResult__KpSE4\",\"pagination\":\"CasesList_pagination__30VB4\",\"loader\":\"CasesList_loader__nZA5H\",\"button\":\"CasesList_button__tVqcS\",\"container\":\"CasesList_container__2FuUE\"};","import React, { useMemo } from \"react\";\n\nconst Text = ({ text }: { text: string }) => (\n
{text}
\n);\n\nexport interface IWaitProps {\n useVerticalLayout?: boolean;\n leftOtTopText?: string;\n rightOrBottomText?: string;\n showBorder?: boolean;\n style?: React.CSSProperties;\n}\n\nconst Wait: React.FC = ({\n leftOtTopText,\n rightOrBottomText,\n style,\n useVerticalLayout,\n showBorder,\n}) => {\n rightOrBottomText = \"Loading...\";\n\n const innerStyle = useMemo(\n () => ({\n height: \"100%\",\n width: \"100%\",\n borderRadius: 4,\n border: showBorder !== false ? \"solid 1px #cde\" : undefined,\n boxShadow:\n showBorder !== false ? \"0 0 3px #cde, 1px 1px 2px #cde\" : undefined,\n flexDirection: useVerticalLayout ? \"column\" : \"row\",\n background: \"#fff\",\n ...style,\n }),\n [showBorder, style, useVerticalLayout]\n );\n\n return (\n
\n
\n {leftOtTopText && }\n {rightOrBottomText && }\n
\n
\n );\n};\n\nexport default Wait;\n","export enum RecordStatus {\n ACTIVE = \"Active\",\n INACTIVE = \"Inactive\",\n}\n","import React from \"react\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Dialog from \"@mui/material/Dialog\";\r\nimport DialogActions from \"@mui/material/DialogActions\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport Alert from \"@mui/material/Alert\";\r\nimport CircularProgress from \"@mui/material/CircularProgress\";\r\nimport Box from \"@mui/material/Box\";\r\nimport css from \"./Dialogs.module.scss\";\r\nimport { DialogType } from \"../../shared/enums/DialogType\";\r\nimport { AppType } from \"../../shared/enums/AppType\";\r\nimport { UserRole } from \"../../shared/enums/UserRole\";\r\nimport { ICSDUserData } from \"../../shared/interfaces/ICSDUser\";\r\nimport {\r\n getInstanceUserFLP,\r\n addUserAsyncFlp,\r\n updateUserAsyncFlp,\r\n deleteUserAsyncFlp,\r\n} from \"../../services/userServiceFlp\";\r\nimport {\r\n addMemberAsyncFlp,\r\n deleteMemberAsyncFlp,\r\n getMemberFLP,\r\n IMemberResponseFlp,\r\n updateMemberAsyncFlp,\r\n} from \"../../services/memberServiceFlp\";\r\nimport { IDevice } from \"../../shared/interfaces/IDeviceList\";\r\nimport { IMemberDataFlp } from \"../../shared/interfaces/IMemberConfFlp\";\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ninterface IDialogs {\r\n isOpen: boolean;\r\n onDialogClosed: (\r\n isOpen: boolean,\r\n isCancelled: boolean,\r\n data: any | null,\r\n error?: boolean\r\n ) => void;\r\n title: string;\r\n content: React.ReactNode;\r\n confirmDisable?: number;\r\n editIndex?: number;\r\n editData?:\r\n | ICSDUserData\r\n | IMemberDataFlp\r\n | IDevice\r\n | IMemberResponseFlp;\r\n dialogType: string;\r\n appType?: string;\r\n updateCountPremiumSeatsInUse?: () => void;\r\n validated?: boolean;\r\n updatePremium?: () => void;\r\n}\r\n\r\nexport default function Dialogs(props: IDialogs) {\r\n const {\r\n isOpen,\r\n onDialogClosed,\r\n title,\r\n content,\r\n editIndex,\r\n editData,\r\n appType,\r\n dialogType,\r\n validated,\r\n } = props;\r\n const [errorMessage, setErrorMessage] = React.useState(\"\");\r\n const [successMessage, setSuccessMessage] = React.useState(\"\");\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n \r\n const {t} = useTranslation();\r\n\r\n const handleAdd = async () => {\r\n // add controls before submit\r\n if (dialogType === DialogType.ADD_MEMBER) {\r\n const member = getMemberFLP();\r\n if (\r\n member.name !== \"\" &&\r\n member.user.firstName !== \"\" &&\r\n member.user.surname !== \"\" &&\r\n member.user.emailAddress !== \"\" &&\r\n member.userReference !== \"\"\r\n ) {\r\n setErrorMessage(\"\");\r\n setIsLoading(true);\r\n await addMemberAsyncFlp(member)\r\n .then(result => {\r\n setIsLoading(false);\r\n onDialogClosed(false, false, result);\r\n })\r\n .catch((e) => {\r\n console.log(e.message);\r\n setErrorMessage(e.message);\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n });\r\n }\r\n }\r\n\r\n if (dialogType === DialogType.ADD_USERFLP) {\r\n const userFlp = getInstanceUserFLP();\r\n if (\r\n userFlp.firstName !== \"\" &&\r\n userFlp.surname !== \"\" &&\r\n userFlp.emailAddress !== \"\" &&\r\n userFlp.role !== UserRole.NOT_SET\r\n ) {\r\n setIsLoading(true);\r\n setErrorMessage(\"\");\r\n try {\r\n const result = await addUserAsyncFlp(userFlp);\r\n onDialogClosed(false, false, result);\r\n } catch (error: any) {\r\n setErrorMessage(error?.message);\r\n }\r\n setIsLoading(false);\r\n }\r\n }\r\n };\r\n\r\n const handleEdit = async () => {\r\n if (typeof editIndex !== \"number\" || editIndex < 0) return; // index incorrect cannot edit item\r\n\r\n if (dialogType === DialogType.EDIT_USERFLP) {\r\n const userFlp = getInstanceUserFLP();\r\n if (\r\n userFlp.firstName !== \"\" &&\r\n userFlp.surname !== \"\" &&\r\n userFlp.emailAddress !== \"\" &&\r\n userFlp.role !== UserRole.NOT_SET\r\n ) {\r\n const result = await updateUserAsyncFlp(userFlp);\r\n onDialogClosed(false, false, result);\r\n }\r\n }\r\n\r\n if (dialogType === DialogType.EDIT_MEMBER) {\r\n const member = getMemberFLP();\r\n if (\r\n member.name !== \"\" &&\r\n member.user.firstName !== \"\" &&\r\n member.user.surname !== \"\" &&\r\n member.user.emailAddress !== \"\" &&\r\n member.userReference !== \"\"\r\n ) {\r\n setErrorMessage(\"\");\r\n await updateMemberAsyncFlp(member)\r\n .then(result => {\r\n onDialogClosed(false, false, result);\r\n })\r\n .catch(() => {\r\n setErrorMessage(t('FailedEditMsg'));\r\n })\r\n .finally(() => {});\r\n }\r\n }\r\n };\r\n\r\n const handleDelete = async () => {\r\n if (typeof editIndex !== \"number\" || editIndex < 0) return; // index incorrect cannot delete item\r\n\r\n // Delete user fleetportal\r\n if (appType === AppType.USERSFLP && undefined !== editData) {\r\n await deleteUserAsyncFlp((editData as ICSDUserData)?.recordId)\r\n .then(_ => {\r\n setSuccessMessage(t('DeleteSuccessMsg'));\r\n })\r\n .catch(_ => {\r\n setErrorMessage(t('FailedDeleteMsg'));\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n onDialogClosed(false, false, null);\r\n });\r\n }\r\n\r\n // Delete member fleetportal\r\n if (appType === AppType.MEMBERS && undefined !== editData) {\r\n await deleteMemberAsyncFlp((editData as IMemberDataFlp)?.recordId)\r\n .then(_ => {\r\n setSuccessMessage(t('DeleteSuccessMsg'));\r\n })\r\n .catch(_ => {\r\n setErrorMessage(t('FailedDeleteMsg'));\r\n })\r\n .finally(() => {\r\n setIsLoading(false);\r\n onDialogClosed(false, false, null);\r\n });\r\n }\r\n };\r\n\r\n const handleDisable = () => {\r\n // updateEnabled(confirmDisable || -1); // replace by the api (when back is done)\r\n onDialogClosed(false, false, null);\r\n };\r\n\r\n const renderDialogContentByType = (type: string) => {\r\n switch (type) {\r\n case DialogType.ADD_MEMBER:\r\n case DialogType.ADD_USERFLP:\r\n return (\r\n <>\r\n
\r\n onDialogClosed(false, true, null)}\r\n variant=\"outlined\"\r\n >\r\n {t('Cancel')}\r\n \r\n
\r\n
\r\n \r\n {isLoading && (\r\n \r\n )}\r\n {!isLoading && <>{t('Add')}}\r\n \r\n
\r\n \r\n );\r\n case DialogType.EDIT_USERFLP:\r\n case DialogType.EDIT_MEMBER:\r\n return (\r\n <>\r\n
\r\n onDialogClosed(false, true, null)}\r\n variant=\"outlined\"\r\n >\r\n {t('Cancel')}\r\n \r\n
\r\n
\r\n \r\n {t('Save')}\r\n \r\n
\r\n \r\n );\r\n case DialogType.APPLICATION_INFO:\r\n return (\r\n
\r\n onDialogClosed(false, true, null)}\r\n variant=\"outlined\"\r\n >\r\n {t('Close')}\r\n \r\n
\r\n );\r\n case DialogType.CONFIRM_DISABLE_DIALOG:\r\n return (\r\n <>\r\n
\r\n onDialogClosed(false, true, null)}\r\n variant=\"outlined\"\r\n >\r\n {t('Cancel')}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n case DialogType.CONFIRM_DELETE:\r\n return (\r\n <>\r\n
\r\n onDialogClosed(false, true, null)}\r\n variant=\"outlined\"\r\n >\r\n {t('Cancel')}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n default:\r\n return <>;\r\n }\r\n };\r\n\r\n return (\r\n
\r\n onDialogClosed(false, false, null)}\r\n aria-labelledby=\"form-dialog-title\"\r\n disableBackdropClick\r\n disableEscapeKeyDown\r\n >\r\n \r\n \r\n {title}\r\n \r\n \r\n {successMessage && {successMessage}}\r\n {errorMessage && (\r\n setErrorMessage(\"\")}>\r\n {errorMessage}\r\n \r\n )}\r\n {content}\r\n \r\n {renderDialogContentByType(dialogType)}\r\n \r\n \r\n
\r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"MemberQuickConnectPartners_root__19SpF\",\"nbResult\":\"MemberQuickConnectPartners_nbResult__3H-zG\",\"pagination\":\"MemberQuickConnectPartners_pagination__-hLSO\",\"logo\":\"MemberQuickConnectPartners_logo__z_wN7\",\"indicationLogo\":\"MemberQuickConnectPartners_indicationLogo__1tJBk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"confirmDisable\":\"ConfirmDisableDialog_confirmDisable__27asT\",\"generalWarning\":\"ConfirmDisableDialog_generalWarning__2e6mp\",\"header\":\"ConfirmDisableDialog_header__1cstK\",\"body\":\"ConfirmDisableDialog_body__1NoL7\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"confirmDelete\":\"ConfirmDeleteDialog_confirmDelete__2KybU\",\"generalWarning\":\"ConfirmDeleteDialog_generalWarning__1CmA_\",\"header\":\"ConfirmDeleteDialog_header__3slV7\",\"body\":\"ConfirmDeleteDialog_body__1zTRv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"Members_root__2KW_o\",\"nbResult\":\"Members_nbResult__3PM2X\",\"pagination\":\"Members_pagination__1crJX\",\"loader\":\"Members_loader__1JIw5\",\"button\":\"Members_button__3LI_5\"};","\r\n export enum UserRole {\r\n NOT_SET = \"NotSet\",\r\n FLP_ADMINISTRATOR = \"FleetPortalAdmin\",\r\n FLP_SUPPORT = \"FleetPortalSupport\",\r\n MEMBER_MANAGER = \"MemberManager\",\r\n MEMBER_SUB_MANAGER = \"MemberSubManager\",\r\n }\r\n ","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"ExchangeLabConf_root__1sO6U\",\"nbResult\":\"ExchangeLabConf_nbResult__2nTV6\",\"pagination\":\"ExchangeLabConf_pagination__2EBsF\",\"loader\":\"ExchangeLabConf_loader__1Avg5\",\"button\":\"ExchangeLabConf_button__hu0-s\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"add_bar\":\"Practice_add_bar__2Xdxq\",\"nb_result\":\"Practice_nb_result__1u8b4\",\"pagination\":\"Practice_pagination__22wbj\",\"button\":\"Practice_button__213wA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"Device_root__OGIAi\",\"nb_result\":\"Device_nb_result__3WYFE\",\"pagination\":\"Device_pagination__2x_S-\"};","import axios from \"axios\";\nimport UrlAssembler from \"url-assembler\";\n\nexport interface IAppConfig {\n readonly name: string;\n readonly apiUrl: UrlAssembler;\n readonly oDataUrl: UrlAssembler;\n readonly buildVersion: string;\n readonly git_commit: string;\n readonly version: string;\n readonly release_date: string;\n readonly FLPOptEnableUserManagement?:boolean;\n}\n\ntype IAppConfigJson = {\n name: string;\n dataUrl: string;\n buildVersion: string;\n git_commit: string;\n version: string;\n release_date: string;\n readonly FLPOptEnableUserManagement?:boolean;\n};\n\nexport class AppConfig implements IAppConfig {\n readonly name: string;\n //private readonly dataUrl: UrlAssembler;\n readonly apiUrl: UrlAssembler;\n readonly oDataUrl: UrlAssembler;\n readonly buildVersion: string;\n readonly git_commit: string;\n readonly version: string;\n readonly release_date: string;\n readonly FLPOptEnableUserManagement?:boolean;\n\n constructor(json: IAppConfigJson) {\n this.name = json.name;\n\n const dataUrl = new UrlAssembler(json.dataUrl);\n this.apiUrl = dataUrl.segment(\"api/v1/\");\n this.oDataUrl = dataUrl.segment(\"odata/v1/\");\n\n this.buildVersion = json.buildVersion;\n this.git_commit = json.git_commit;\n this.version = json.version;\n this.release_date = json.release_date;\n\n // Option to enable disable user management in fleet portal application\n this.FLPOptEnableUserManagement = json.FLPOptEnableUserManagement;\n }\n}\n\nlet loadedConfig: IAppConfig;\n\n// Load config file from \"/public/config.json\"\nconst configFileName = \"config.json\";\nconst configUrl = process.env.PUBLIC_URL + \"/\" + configFileName;\n\nasync function internalLoadConfig() {\n try {\n const configResponse = await axios.get(configUrl);\n loadedConfig = new AppConfig(configResponse.data);\n return loadedConfig;\n } catch (e) {\n throw new Error(`Failed to load app configuration (${configFileName})`);\n }\n}\n\nconst configLoaderPromise = internalLoadConfig();\n// The following isn't strictly needed -- we could just export `cachedConfigLoader` directly.\n// However, making it a function makes for a better API. Ex: Instead of `loadConfig.then(...)`, caller will need to use `loadConfig().then(...)`\nconst loadConfig = () => configLoaderPromise;\n\nfunction getLoadedConfig() {\n if (!loadedConfig) {\n throw new Error(\"App configuration hasn't been loaded!\");\n }\n\n return loadedConfig;\n}\n\nexport { getLoadedConfig as default, loadConfig };\n","import { useState, useCallback } from \"react\";\n\n// Used to manage state of components that can be in opened/closed state -- ex. Dialogs.\n// Ex:\n// const [isOpen, open, close] = useDialogState();\n// return (\n//
\n//
\n// );\n\nconst useDialogState = (\n initiallyOpen = false\n): [boolean, () => void, () => void] => {\n const [isOpen, setIsOpen] = useState(initiallyOpen);\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n return [isOpen, open, close];\n};\n\nexport default useDialogState;\n","export default __webpack_public_path__ + \"static/media/ico-GeneralWarning.a7836b39.svg\";","import { AuthenticationResult, SilentRequest } from \"@azure/msal-browser\";\nimport axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { getLoggedInUser } from \"../authService\";\nimport { scopes } from \"../authService/msal-config.json\";\nimport { getMsalClient } from \"../authService/msalClient\";\n\ninterface IServerApiInnerError {\n type: string;\n message: string;\n stacktrace: string;\n innerError?: IServerApiInnerError;\n}\n\nexport interface IServerApiError {\n error: {\n code: string;\n message: string;\n innererror?: IServerApiInnerError;\n };\n}\n\nfunction isServerApiError(error: any): error is IServerApiError {\n return error.error && error.error.code && error.error.message;\n}\n\n// This is returned, for example, when the WebApi fails to parse the JSON (ex. invalid Guid)\nexport interface IServerException {\n Message: string;\n ExceptionType: string;\n ExceptionMessage: string;\n}\n\nfunction isServerException(error: any): error is IServerException {\n return error.Message && error.ExceptionType && error.ExceptionMessage;\n}\n\n// Custom HTTP Error\nexport class HttpError extends Error {\n readonly statusCode: number | undefined;\n\n constructor(message: string, statusCode?: number) {\n super(message);\n this.name = \"XHttpError\" + (statusCode ? `.${statusCode}` : \"\");\n this.statusCode = statusCode;\n }\n}\n\nfunction throwHttpError(error: AxiosError, isRetry: boolean): never {\n const statusCode = error.response && error.response.status;\n console.assert(statusCode !== 401);\n const prefix = isRetry ? \"[Retry-Phase] \" : \"\";\n\n // Handle \"400 - Bad Data\" error.\n if (statusCode === 400) {\n let errorResponse = error.response!.data;\n if (isServerException(errorResponse)) {\n throw new HttpError(prefix + errorResponse.ExceptionMessage, statusCode);\n }\n\n if (isServerApiError(errorResponse)) {\n throw new HttpError(prefix + errorResponse.error.message, statusCode);\n }\n\n if (errorResponse.Message) {\n throw new HttpError(prefix + errorResponse.Message, statusCode);\n }\n\n // Check if detail section is present in the error response\n if (error.response!.data.detail) {\n errorResponse = error.response!.data.detail;\n }\n\n throw new HttpError(prefix + errorResponse, statusCode);\n }\n\n // handle error detail or title -- Note: keep this until error management is DONE\n if (error.response?.data?.detail || error.response?.data?.title) {\n throw new HttpError(\n prefix + (error.response?.data?.detail || error.response?.data?.title),\n statusCode\n );\n }\n\n throw new HttpError(prefix + error.message, statusCode);\n}\n\n// Create custom instance of Axios for API requests\nconst http = axios.create();\n\n// Set the request bearer token\nfunction setRequestBearerToken(\n config: AxiosRequestConfig,\n accessToken: string\n) {\n console.assert(!!accessToken);\n config.headers = config.headers ?? {};\n config.headers.Authorization = `Bearer ${accessToken}`;\n}\n\n// Custom request interceptor\nhttp.interceptors.request.use(async (config: AxiosRequestConfig) => {\n if (!config.method) {\n throw new Error(\"HTTP Rquest invoked witout a method.\");\n }\n\n config.headers = config.headers ?? {};\n // Azure AD Bearer token\n if (!config.headers.Authorization) {\n let authResponse: AuthenticationResult | undefined = undefined;\n\n try {\n const msalClient = getMsalClient();\n const account = getLoggedInUser();\n if (account) {\n const request: SilentRequest = {\n scopes: [scopes.userStandard],\n account: account,\n };\n\n authResponse = await msalClient.acquireTokenSilent(request);\n } else {\n throw new Error(\"HTTP Request invoked without a logged-in user.\");\n }\n console.assert(!!authResponse?.accessToken);\n } catch (error: any) {\n throw new HttpError(\n \"Auth token aquisition failure. \" + error?.message,\n 401\n );\n }\n setRequestBearerToken(config, authResponse!.accessToken);\n }\n\n return config;\n});\n\nhttp.interceptors.response.use(\n (response: AxiosResponse) => {\n return response;\n },\n (error: AxiosError) => {\n console.log(\"Interceptor Response Error\" + error);\n\n // NOTE: When a CORS request fails, no response is passed along to Axios, and Axios will return\n // `error.code === undefined`, `error.response === undefined` and `error.message` === \"Network Error\".\n // Ref: https://github.com/axios/axios/issues/383\n const statusCode = error.response && error.response.status;\n if (!statusCode) {\n throw new HttpError(\n typeof error.code === \"undefined\"\n ? \"Possible CORS failure.\"\n : error.message,\n statusCode\n );\n }\n\n // Is this an authentication error?\n if (statusCode === 401) {\n throw new HttpError(\n \"Authentication failure: \" + error.message,\n statusCode\n );\n }\n\n // Is this an authorisation error?\n if (statusCode === 403) {\n throw new HttpError(\n \"Authorisation failure: \" + error.message,\n statusCode\n );\n }\n\n if (error?.config?.params?.notThrowError) {\n console.error(error);\n } else throwHttpError(error, false);\n }\n);\n\nexport default http;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"nbResult\":\"DenseTable_nbResult__1BpBS\",\"editIcon\":\"DenseTable_editIcon__2LOIH\",\"cursorPointer\":\"DenseTable_cursorPointer__2BfYO\",\"premiumLogo\":\"DenseTable_premiumLogo__36MmA\",\"tableRow\":\"DenseTable_tableRow__2xoAr\",\"MuiTableCell-body\":\"DenseTable_MuiTableCell-body__1kkcY\",\"busyProgress\":\"DenseTable_busyProgress__220OR\",\"ackdrop\":\"DenseTable_ackdrop__2xLXp\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"InputForm_container__32ZV_\",\"title\":\"InputForm_title__griGB\",\"field\":\"InputForm_field__38KFu\"};","export enum DialogType {\n ADD_MEMBER = \"addMember\",\n CONFIRM_DISABLE_DIALOG = \"confirmDisableDialog\",\n CONFIRM_DELETE = \"confirmDelete\",\n ADD_CSD_USER = \"addCSDUser\",\n EDIT_CSD_USER = \"editCSDUser\",\n EDIT_MEMBER = \"editMember\",\n APPLICATION_INFO = \"appInfo\",\n ADD_USERFLP = \"addUserFlp\",\n EDIT_USERFLP = \"editUserFlp\",\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"home\":\"App_home__3GNPx\",\"content\":\"App_content__11LHs\",\"hcentered\":\"App_hcentered__12FKg\",\"footerContainer\":\"App_footerContainer__1JVKU\"};","import React from \"react\";\r\nimport { UserRole } from \"../../../shared/enums/UserRole\";\r\nimport { IUserDataFlp } from \"../../../shared/interfaces/IUserDataFlp\";\r\nimport css from \"./AddEditUserFlpDialog.module.scss\";\r\nimport { setInstanceUserFLP } from \"../../../services/userServiceFlp\";\r\nimport isEmail from \"validator/lib/isEmail\";\r\nimport { useTranslation } from 'react-i18next'; \r\n\r\ninterface IProps {\r\n editRowData?: IUserDataFlp;\r\n}\r\n\r\nexport default function AddEditDealerDialog(props: IProps) {\r\n const { editRowData } = props;\r\n const user: IUserDataFlp | undefined = editRowData;\r\n\r\n const [firstName, setFirstName] = React.useState(\r\n user?.firstName || \"\"\r\n );\r\n const [surname, setSurname] = React.useState(user?.surname || \"\");\r\n const [emailAddress, setEmailAddress] = React.useState(\r\n user?.emailAddress || \"\"\r\n );\r\n const [emailInvalidText, setEmailInvalidText] = React.useState(\"\");\r\n const [role, setRole] = React.useState(\r\n user?.role || UserRole.NOT_SET\r\n );\r\n const {t} = useTranslation();\r\n\r\n React.useEffect(() => {\r\n setInstanceUserFLP({\r\n recordId: undefined === user ? \"\" : user.recordId,\r\n firstName: firstName,\r\n surname: surname,\r\n emailAddress: isEmail(emailAddress) ? emailAddress : \"\",\r\n role: role,\r\n });\r\n }, [firstName, surname, emailAddress, role, user]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {\r\n setFirstName(e.target.value);\r\n }}\r\n />\r\n
\r\n
\r\n \r\n {\r\n setSurname(e.target.value);\r\n }}\r\n />\r\n
\r\n
\r\n \r\n {\r\n !isEmail(emailAddress)\r\n ? setEmailInvalidText(\"Invalid email !\")\r\n : setEmailInvalidText(\"\");\r\n }}\r\n onChange={e => setEmailAddress(e.target.value)}\r\n />\r\n {emailInvalidText !== \"\" && (\r\n

{emailInvalidText}

\r\n )}\r\n
\r\n
\r\n \r\n {\r\n setRole(e.target.value);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"addMember\":\"AddMemberDialog_addMember__1WvqZ\",\"customerRef\":\"AddMemberDialog_customerRef__fOlzA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"field\":\"PracticeForm_field__2_5qu\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pageFooter\":\"PageFooter_pageFooter__23CVc\",\"termsOfUseLink\":\"PageFooter_termsOfUseLink__2erCr\"};","/* Display types */\nexport enum AppType {\n QUICK_CONNECT_PARTNERS = \"quickConnectPartners\",\n MEMBERS = \"members\",\n DEVICES = \"devices\",\n CSD = \"csd\",\n DEALERS = \"dealers\",\n USERSFLP = \"usersFlp\",\n LABEXCHANGE = \"labExchange\",\n AIDETECTION = \"aiDetection\",\n DEALER_USERS = \"dealerUsers\",\n PRACTICE = \"practice\",\n DASHBOARD_OVERVIEW = \"dashboard_overview\",\n DASHBOARD_PRACTICE_CASES = \"dashboard_practice_cases\",\n DASHBOARD = \"dashboard\",\n DASHBOARD_CASESLIST = \"dashboard_cases_list\"\n}\n","import React, { useEffect } from \"react\";\nimport {\n InteractionStatus,\n EventMessage,\n EventType,\n AuthenticationResult,\n AccountInfo,\n} from \"@azure/msal-browser\";\nimport { useMsal } from \"@azure/msal-react\";\nimport { consoleTextStyles } from \"./msalClient\";\nimport Wait from \"../../shared/Wait\";\nimport IAuthService from \"../../shared/interfaces/IAuthService\";\n\nconst MsalContainer: React.FC<{\n authService: IAuthService;\n logMessages: boolean;\n}> = ({ authService, logMessages, children }) => {\n const { instance, inProgress } = useMsal();\n\n // Handle MSAL events\n useEffect(() => {\n const setLoggedInUser = async (account: AccountInfo | null) => {\n await authService.setLoggedInUser(account);\n };\n\n // Add event handler\n const callbackId = instance.addEventCallback((event: EventMessage) => {\n if (logMessages) {\n console.log(\n `%cMSAL%c Event: ${event.eventType}. Interaction: ${event.interactionType}. Error: ${event.error}`,\n consoleTextStyles.Title,\n consoleTextStyles.Unset\n );\n }\n\n switch (event.eventType) {\n case EventType.LOGIN_START:\n case EventType.LOGOUT_START:\n setLoggedInUser(null);\n break;\n\n case EventType.LOGIN_SUCCESS:\n const account = (event.payload as AuthenticationResult).account;\n setLoggedInUser(account);\n break;\n\n case EventType.LOGIN_FAILURE:\n console.groupCollapsed(\n \"%cLogin failed. There's likely a configuration issue.\",\n \"background: #faa; color: red\"\n );\n console.error(event.error);\n console.groupEnd();\n }\n });\n\n // Remove event handler\n return function detachEvent() {\n if (callbackId) {\n instance.removeEventCallback(callbackId);\n }\n };\n }, [authService, instance, logMessages]);\n\n // Is the app handling MSAL events?\n if (inProgress !== InteractionStatus.None) {\n return (\n
\n
\n \n
\n
\n );\n }\n\n // All good. Load rest of app.\n return <>{children};\n};\n\nexport default MsalContainer;\n","import React, { useContext, useMemo } from \"react\";\nimport {\n MsalProvider,\n UnauthenticatedTemplate as MsalUnauthenticatedTemplate,\n AuthenticatedTemplate as MsalAuthenticatedTemplate,\n} from \"@azure/msal-react\";\nimport { csdLoginRequest, getMsalClient, loginRequest } from \"./msalClient\";\nimport IAuthService from \"../../shared/interfaces/IAuthService\";\nimport { AccountInfo } from \"@azure/msal-browser\";\nimport MsalContainer from \"./MsalContainer\";\nimport getLoadedConfig from \"../appConfigService\";\nimport http from \"../api/http\";\nimport { RecordStatus } from \"../../shared/enums/RecordStatus\";\nimport { UserRole } from \"../../shared/enums/UserRole\";\nimport IAccountInfoFLP from \"../../shared/interfaces/IAccountInfo\";\n\nconst accountIdentifierKey = \"_account_Id_\";\nconst accountInfoKey = \"_account_info_\";\n\nexport const getCurrentAccountId = (throwIfNotFound: boolean = false) => {\n const id = sessionStorage.getItem(accountIdentifierKey) || undefined;\n if (!id && throwIfNotFound) {\n throw new Error(\"Can't find logged in user's account ID.\");\n }\n\n return id;\n};\n\nexport const getLoggedInUser = (throwIfNotFound: boolean = true) => {\n const accountId = getCurrentAccountId(throwIfNotFound);\n const account = getMsalClient().getAccountByHomeId(accountId || \"\");\n\n if (!account && throwIfNotFound) {\n throw new Error(\"No logged in user found\");\n }\n return account;\n};\n\nexport const getAccountEmail = (account = getLoggedInUser()) =>\n (account?.idTokenClaims as { email: string })?.email;\n\ntype Type_IAccount = IAccountInfoFLP;\n\nasync function getUserAccount(): Promise {\n const data = sessionStorage.getItem(accountInfoKey);\n if (data) {\n var accountInfo = JSON.parse(data) as Type_IAccount;\n return accountInfo;\n } else {\n try {\n const config = getLoadedConfig();\n const url = config.apiUrl + `Account`;\n\n const req = await http.get(url);\n\n sessionStorage.setItem(accountInfoKey, JSON.stringify(req.data));\n\n return req.data;\n } catch (error) {\n return undefined;\n }\n }\n}\n\nconst setLoggedInUser = (account: AccountInfo | null) => {\n if (!account) {\n sessionStorage.removeItem(accountIdentifierKey);\n sessionStorage.removeItem(accountInfoKey);\n } else {\n sessionStorage.setItem(accountIdentifierKey, account.homeAccountId);\n }\n};\n\n// Base class to keep in common base behaviour\nabstract class BaseAuthService implements IAuthService {\n\n login = async (performCSDLogin: boolean) => {\n this.setLoggedInUser(null);\n\n const authRequest = performCSDLogin ? csdLoginRequest : loginRequest;\n\n await getMsalClient().loginRedirect(authRequest);\n };\n\n logout = async () => {\n this.setLoggedInUser(null);\n\n await getMsalClient().logoutRedirect();\n };\n\n setLoggedInUser = async (account: AccountInfo | null) => {\n setLoggedInUser(account);\n };\n\n getLoggedInUser = (throwIfNotFound = true) =>\n getLoggedInUser(throwIfNotFound);\n\n get isLoggedIn() {\n return !!this.getLoggedInUser(false);\n }\n\n isAuthorizedUser = async () => {\n const account = await getUserAccount();\n\n if (account && account.recordStatus === RecordStatus.ACTIVE) {\n return true;\n } else {\n return false;\n }\n };\n\n getUserId = async () => {\n const account = await getUserAccount();\n\n if (account) {\n const recordId = account.recordId;\n return recordId;\n } else {\n return \"Unknown\";\n }\n };\n\n getUserReference = async () => {\n const account = await getUserAccount();\n\n if (account) {\n const reference = account.userReference;\n return reference;\n } else {\n return \"Unknown\";\n }\n };\n\n isUserRole = async (userRole: UserRole) => {\n const account = await getUserAccount();\n\n if (account?.role) {\n return account.role === userRole;\n } else {\n return false;\n }\n };\n\n abstract getUserReferences(): Promise;\n abstract getUserAvatar(): Promise;\n abstract getDisplayName(): Promise;\n abstract getUserRole(): Promise;\n}\n\n// Auth Service for fleet portal\nclass FleetPortalAuthService extends BaseAuthService {\n getUserReferences = async () => {\n // Not implemented\n throw Error(\"Fleetportal getUserReferences Not implemented\");\n };\n\n getUserAvatar = async () => {\n const account = (await getUserAccount()) as IAccountInfoFLP;\n\n if (account) {\n // Take the first letter of the surname and the first letter of the firstname for avatar\n const avatar =\n account.firstName.slice(0, 1).toUpperCase() +\n account.surname.slice(0, 1).toUpperCase();\n return avatar;\n } else {\n return \"U\";\n }\n };\n\n getDisplayName = async () => {\n const account = (await getUserAccount()) as IAccountInfoFLP;\n\n if (account) {\n const displayName = account.firstName + \" \" + account.surname;\n return displayName;\n } else {\n return \"Unknown\";\n }\n };\n\n getUserRole = async () => {\n const account = await getUserAccount();\n\n if (account) {\n const role = account.role as UserRole;\n return role;\n } else {\n return UserRole.NOT_SET;\n }\n };\n\n RoleManager = async () => {\n throw new Error(\"Not implemented for fleetportal\");\n }\n\n isTTSBarcelona = async () => {\n throw new Error(\"Not implemented for fleetportal\");\n }\n\n}\n\n/// Auth Provider\nconst context = React.createContext(\n new Error(\"MSAL Client isn't available on context!\")\n);\n\nconst FactoryAuthService = (): IAuthService | null => {\n return new FleetPortalAuthService();\n};\n\nexport const AuthServiceProvider: React.FC = ({ children }) => {\n const config = getLoadedConfig();\n\n const instanceAutService = FactoryAuthService();\n if (!instanceAutService) throw new Error(\"Cannot create autService\");\n\n const authService = useMemo(() => instanceAutService, []);\n\n // Wrap in MSAL provider\n return (\n \n \n \n {children}\n \n \n \n );\n};\n\nfunction useAuthService() {\n const ctx = useContext(context);\n if (ctx instanceof Error) {\n throw ctx;\n }\n return ctx;\n}\n\nexport const UnauthenticatedTemplate: React.FC = ({ children }) => (\n \n);\n\nexport const AuthenticatedTemplate: React.FC = ({ children }) => (\n \n);\n\nexport default useAuthService;\n","import React, { useEffect } from \"react\";\r\nimport { makeStyles } from \"@mui/material/styles\";\r\nimport Table from \"@mui/material/Table\";\r\nimport TableBody from \"@mui/material/TableBody\";\r\nimport TableCell from \"@mui/material/TableCell\";\r\nimport TableContainer from \"@mui/material/TableContainer\";\r\nimport TableHead from \"@mui/material/TableHead\";\r\nimport TableRow from \"@mui/material/TableRow\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport {\r\n Button\r\n} from \"@mui/material\";\r\nimport premiumLogo from \"../../../assets/images/premium.svg\";\r\nimport useDialogState from \"../../../shared/useDialogState\";\r\nimport Dialogs from \"../../Dialogs\";\r\nimport ConfirmDisableDialog from \"../../Dialogs/ConfirmDisableDialog\";\r\nimport {\r\n ISupportDeviceColumn,\r\n IDeviceRowData,\r\n} from \"../../../shared/interfaces/IDeviceConf\";\r\nimport { useState } from \"react\";\r\nimport { AppType } from \"../../../shared/enums/AppType\";\r\nimport { DialogType } from \"../../../shared/enums/DialogType\";\r\nimport useAuthService from \"../../../services/authService\";\r\nimport {\r\n IDeviceColumnFLP,\r\n IDeviceDataFLP,\r\n} from \"../../../shared/interfaces/IDeviceList\";\r\nimport {\r\n IUserColumnFlp,\r\n IUserDataFlp,\r\n} from \"../../../shared/interfaces/IUserDataFlp\";\r\nimport AddEditUserFlpDialog from \"../../Dialogs/AddEditUserFlpDialog\";\r\nimport { UserRole } from \"../../../shared/enums/UserRole\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport classes from './DenseTable.module.scss'\r\n\r\ninterface IDenseTableProps {\r\n columns:\r\n | ISupportDeviceColumn[]\r\n | IDeviceColumnFLP[]\r\n | IUserColumnFlp[];\r\n rows:\r\n | IDeviceRowData[]\r\n | IDeviceDataFLP[]\r\n | IUserDataFlp[];\r\n totalCount: number;\r\n type: string;\r\n pageNumber?: number;\r\n itemPerPage?: number;\r\n}\r\n\r\ntype DenseColumn =\r\n | ISupportDeviceColumn\r\n | IDeviceColumnFLP\r\n | IUserColumnFlp;\r\n\r\nexport default function DenseTable(props: IDenseTableProps) {\r\n const { columns, rows, totalCount, type, pageNumber, itemPerPage } = props;\r\n const [isOpen, open, close] = useDialogState();\r\n const [rowData, setRowData] = React.useState([]);\r\n const [recordCount, setRecordCount] = React.useState(0);\r\n const [editRowData, setEditRowData] = React.useState([]);\r\n const [editRowIndex, setEditRowIndex] = React.useState(-1);\r\n let [rowIndex, setRowIndex] = React.useState(-1);\r\n const [validated, setValidated] = React.useState(false);\r\n const [fieldConflictError, setFieldConflictError] = React.useState(\"\")\r\n\r\n const [dialogType, setDialogType] = useState(\"\");\r\n const [title, setTitle] = useState(\"\"); \r\n \r\n const {t} = useTranslation();\r\n const authService = useAuthService();\r\n const [userRole, setUserRole] = useState(\r\n UserRole.NOT_SET\r\n );\r\n\r\n const renderDialogContentByType = (dialogType: string) => {\r\n switch (dialogType) {\r\n case DialogType.CONFIRM_DISABLE_DIALOG:\r\n return ;\r\n case DialogType.ADD_USERFLP:\r\n return ;\r\n case DialogType.EDIT_USERFLP:\r\n return ;\r\n default:\r\n return <>;\r\n }\r\n };\r\n\r\n // Handle dialog close event\r\n const handleDialogClose = (\r\n isOpen: boolean,\r\n cancelled: boolean,\r\n data: any,\r\n error?: boolean\r\n ) => {\r\n if (error) {\r\n setFieldConflictError(data)\r\n } else {\r\n setFieldConflictError(\"\")\r\n\r\n // Do nothing if the dialog was cancelled\r\n if (!cancelled) {\r\n // Add user flp\r\n if (\r\n dialogType === DialogType.ADD_USERFLP ||\r\n dialogType === DialogType.EDIT_USERFLP\r\n ) {\r\n if (data) {\r\n // Add new user in front\r\n if (-1 === editRowIndex) {\r\n rowData.push(data as IUserDataFlp);\r\n } else if (dialogType === DialogType.EDIT_USERFLP) {\r\n rowData[editRowIndex] = data;\r\n }\r\n }\r\n }\r\n\r\n // Remove row from data\r\n if (dialogType === DialogType.CONFIRM_DELETE) {\r\n rowData.splice(editRowIndex, 1);\r\n }\r\n }\r\n\r\n if (\r\n dialogType === DialogType.ADD_MEMBER ||\r\n dialogType === DialogType.EDIT_MEMBER\r\n ) {\r\n setValidated?.(false);\r\n }\r\n\r\n close();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const fetchUserRole = async () => {\r\n const role = await authService.getUserRole();\r\n setUserRole(role);\r\n };\r\n fetchUserRole();\r\n setRowData(rows);\r\n setRecordCount(totalCount);\r\n\r\n }, [rowData, totalCount, rows, authService]);\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {type === AppType.USERSFLP && (\r\n {\r\n setTitle(t('AddUser'));\r\n setDialogType(DialogType.ADD_USERFLP);\r\n setEditRowIndex(-1);\r\n open();\r\n }}\r\n >\r\n \r\n Add User\r\n \r\n )}\r\n
\r\n

\r\n {recordCount > 1 ? recordCount + \" results\" : recordCount + \" result\"}\r\n

\r\n
\r\n {isOpen && (\r\n \r\n )}\r\n\r\n
\r\n \r\n \r\n \r\n \r\n {columns.map((column: DenseColumn) => (\r\n (column.id !== \"actions\") &&\r\n \r\n {column.id === \"premium\" ? (\r\n \r\n ) : (\r\n column.label\r\n )}\r\n \r\n ))}\r\n \r\n \r\n \r\n {rowData.map((row: any, index: number) => {\r\n return (\r\n \r\n {columns.map((column: DenseColumn) => {\r\n return (column.id !== \"actions\") &&\r\n (\r\n \r\n {column.id === \"no\" && pageNumber && (\r\n <>\r\n {(pageNumber - 1) *\r\n (itemPerPage ? itemPerPage : 0) +\r\n index +\r\n 1}\r\n \r\n )}\r\n\r\n {column.id === \"activation\" && (\r\n <>{row?.activationDate}\r\n )}\r\n\r\n {column.id === \"recordId\" ? (\r\n index + 1\r\n ) : (\r\n eval(\"row.\" + column.id)\r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n","export default __webpack_public_path__ + \"static/media/premium.d2212c35.svg\";","import React from \"react\";\nimport css from \"./ConfirmDisableDialog.module.scss\";\nimport GeneralWarning from \"../../../assets/images/indications/ico-GeneralWarning.svg\";\nimport { useTranslation } from 'react-i18next'; \n\nexport default function ConfirmDisableDialog() {\n\n const {t} = useTranslation();\n \n return (\n
\n \n

{t('DisableLab')}

\n

\n {t('DeletePartnerMsg')}\n
\n {t('ProceedMsg')}\n

\n
\n );\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"addEditUserFlp\":\"AddEditUserFlpDialog_addEditUserFlp__1WRck\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"UserConfFlp_root__10qBf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dialogContent\":\"Dialog_dialogContent__2r7LD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"field\":\"DeviceForm_field__nNrw5\",\"textInput\":\"DeviceForm_textInput__15e2o\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dialogContent\":\"CustomizedDialog_dialogContent__1s6Sv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"PracticeCases_root__2zXcg\",\"container\":\"PracticeCases_container__2KTI1\",\"chartContainer\":\"PracticeCases_chartContainer__39eOs\",\"legendRoot\":\"PracticeCases_legendRoot__tIxMs\",\"legendItem\":\"PracticeCases_legendItem__3N8yV\",\"legendSvg\":\"PracticeCases_legendSvg__18eda\",\"header\":\"PracticeCases_header__3uJI5\",\"dateRange\":\"PracticeCases_dateRange__3G3Pq\",\"countHeader\":\"PracticeCases_countHeader__2q_-x\",\"countCell\":\"PracticeCases_countCell__1K2hJ\",\"totalCell\":\"PracticeCases_totalCell__bM0iO\",\"totalLabel\":\"PracticeCases_totalLabel__2Y-_F\",\"calendar\":\"PracticeCases_calendar__wmCjO\",\"calendarPopup\":\"PracticeCases_calendarPopup__3_Q0T\",\"calendarContainer\":\"PracticeCases_calendarContainer__a34D_\",\"rdrStaticRangeLabel\":\"PracticeCases_rdrStaticRangeLabel__34gw6\",\"rdrDateRangePickerWrapper\":\"PracticeCases_rdrDateRangePickerWrapper__Us13c\",\"calendar-arrow\":\"PracticeCases_calendar-arrow__2KsQY\",\"react-calendar__navigation\":\"PracticeCases_react-calendar__navigation__3g0HM\",\"react-calendar__navigation__arrow\":\"PracticeCases_react-calendar__navigation__arrow__3YfoF\",\"react-calendar__month-view__weekdays\":\"PracticeCases_react-calendar__month-view__weekdays__tlPQk\",\"react-calendar__month-view__days\":\"PracticeCases_react-calendar__month-view__days__3v3_M\",\"active\":\"PracticeCases_active__2kawM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mainLayout\":\"TermsOfUse_mainLayout__3tHiT\"};","import { RecordStatus } from \"../shared/enums/RecordStatus\";\nimport http from \"./api/http\";\nimport getLoadedConfig from \"./appConfigService\";\nimport { IUserRequest } from \"./userServiceFlp\";\nimport { BuildUserReference } from \"../shared/utils/utils\";\nimport { UserRole } from \"../shared/enums/UserRole\";\n\nconst member: IMemberRequestFlp = {\n recordId: \"\",\n name: \"\",\n invite: false,\n userReference: \"\",\n user: {\n recordId: \"\",\n firstName: \"\",\n surname: \"\",\n emailAddress: \"\",\n role: \"\",\n },\n};\n\nexport interface IMemberRequestFlp {\n recordId: string;\n name: string;\n invite: boolean;\n userReference: string;\n user: IUserRequest;\n}\n\nexport interface IMemberResponseFlp {\n recordId: string;\n name: string;\n userReference: string;\n userId: string;\n user: IUserRequest;\n}\n\nexport const updateRecordId = (memberRecordId: string) => {\n member.recordId = memberRecordId;\n};\n\nexport const updateUserRecordId = (userRecordId: string) => {\n member.user.recordId = userRecordId;\n};\n\nexport const updateMembersNameFlp = (name: string) => {\n member.name = name;\n};\n\nexport const updateUserFirstNameFlp = (userFirstName: string) => {\n member.user.firstName = userFirstName;\n};\n\nexport const updateUserSurnameFlp = (userSurname: string) => {\n member.user.surname = userSurname;\n};\n\nexport const updateEmailFLP = (email: string) => {\n member.user.emailAddress = email;\n};\n\nexport const getMemberFLP = (): IMemberRequestFlp => {\n return member;\n};\n\nexport const updateMembersUserReferenceFlp = (userReference: string[]) => {\n member.userReference = BuildUserReference(\n userReference,\n member.userReference\n );\n};\n\nexport const getMembersFlpAsync = async (\n includeInactive: boolean,\n start: number,\n memberPerPage: number,\n searchValue: string\n): Promise => {\n let query = getLoadedConfig().oDataUrl + \"Members\";\n\n // Filter by record status inorder to have only the active user\n if (!includeInactive)\n query += `/?$filter=(recordStatus eq '${RecordStatus.ACTIVE}')`;\n\n if (searchValue) {\n searchValue = searchValue.toLowerCase();\n query += `and (contains(tolower(Name),'${searchValue}') or \n contains(tolower(user/FirstName),'${searchValue}') or \n contains(tolower(user/Surname),'${searchValue}') or \n contains(tolower(user/EmailAddress),'${searchValue}'))`;\n }\n\n query += `&$expand=user&$count=true&$top=${memberPerPage}&$skip=${start}&$orderby=recordCreated desc`;\n\n const req = await http.get(query);\n\n return req.data;\n};\n\nexport const addMemberAsyncFlp = async (\n data: IMemberRequestFlp\n): Promise => {\n const req = await http.post(\n getLoadedConfig().oDataUrl + \"Members?$expand=user\",\n {\n name: data.name,\n userReference: data.userReference,\n user: {\n firstName: data.user.firstName,\n surname: data.user.surname,\n emailAddress: data.user.emailAddress,\n role: UserRole.MEMBER_MANAGER, //A member is a member manager\n },\n }\n );\n\n return req.data.value[0];\n};\n\nexport const updateMemberAsyncFlp = async (\n data: IMemberRequestFlp\n): Promise => {\n const req = await http.put(\n getLoadedConfig().oDataUrl + `members(${data.recordId})?$expand=user`,\n {\n recordId: data.recordId,\n userReference: data.userReference,\n name: data.name,\n user: {\n recordId: data.user.recordId,\n firstName: data.user.firstName,\n surname: data.user.surname,\n emailAddress: data.user.emailAddress,\n },\n }\n );\n\n return req.data.value[0];\n};\n\nexport const deleteMemberAsyncFlp = async (\n recordId: string\n): Promise => {\n const req = await http.delete(\n getLoadedConfig().oDataUrl + `Members(${recordId})`\n );\n\n return req.data.value[0];\n};\n\nexport const getMembersList = async (\n): Promise => {\n let query = getLoadedConfig().oDataUrl + \"Members\";\n \n query += `?$select=recordId,name&$orderby=name asc`;\n \n const req = await http.get(query);\n \n return req.data?.value;\n};\n","export const licenceKeysRegex = (licenseKey: string): boolean => {\n //return /^[a-zA-Z]{3}[0-9]{1}[a-zA-Z]{6}$/.test(licenceKey)\n return /^[a-zA-Z0-9]{10}$/.test(licenseKey);\n};\n\n// Check syntax of IOS device serial number\nexport const serialNumberRegex = (sn: string): boolean => {\n // Serial number syntax for camera\n return /^([A-Za-z]{2})([Nn][A-La-l])([A-Za-z0-9]{4})$/.test(sn);\n};\n\n\n// The minimum number of digits we have for an Customer Ref is 6\n// but there are also 7 and 8 digit numbers in use. Here are the min and max (excluding IDs that use alpha characters and can be 10 characters long,\n// which I think are for internal customers) exple: 100064, 21010261\n// There are over 900 accounts that use alphanumeric IDs and these range from 6 to 10 characters.\n// 04-MARCH-2022: Extending regex by precaution to 5-12 characters in prevision of Envista migration, en because we are adding an additional check that SAP ID is matching existing devices\nexport const CustomerRefRegex = (sapAccount: string): boolean => {\n\n return (\n /^[A-Za-z0-9]{4,12}$/.test(sapAccount)\n );\n};\n\n// Format a string date to short date as given example: 'January 01 1970'\nexport const FormatShortDate = (aDate: string): string => {\n if (aDate) {\n const date = new Date(aDate);\n return date\n .toLocaleDateString(\"en-us\", {\n day: \"2-digit\",\n month: \"long\",\n year: \"numeric\",\n })\n .replace(\",\", \" \");\n } else {\n return \"\";\n }\n};\nexport const FormatDateMMYYYY = (aDate: string): string => {\n if (aDate) {\n const date = new Date(aDate);\n return date\n .toLocaleDateString(\"en-us\", { day: 'numeric', month: \"short\", year: \"numeric\" })\n } else {\n return \"\";\n }\n};\n\n// Format a string date to short date as given example: 'Jan, 01, 1970'\nexport const FormatDate = (aDate: string): string => {\n if (aDate) {\n const date = new Date(aDate);\n return date.toLocaleString(\"en-us\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n });\n } else {\n return \"\";\n }\n};\n\nexport const GetDifferenceInDays = (\n dateOne: number,\n dateTwo: number\n): number => {\n const dateDiff = dateOne - dateTwo;\n return dateDiff / (1000 * 60 * 60 * 24);\n};\n\nexport function EnumKeys(e: E): (keyof E)[] {\n return Object.keys(e) as (keyof E)[];\n}\n\n// From a string or an array of string\n// Build the serialize string for user references that contains several sap number concatenated separated by coma\nexport const BuildUserReference = (\n input_userReference: string | string[],\n init_userReference: string\n): string => {\n let output_userReference = init_userReference;\n\n let references: string[] =\n output_userReference !== \"\"\n ? output_userReference\n .split(\",\")\n .map(input_userReference => input_userReference.trim())\n : [];\n if (typeof input_userReference === \"string\")\n references.push(input_userReference);\n if (typeof input_userReference === \"object\")\n references = input_userReference as string[];\n\n output_userReference = references.join();\n\n return output_userReference;\n};\n\nexport const ConvertArrayReferences = (userReference: string): string[] => {\n let references: string[] =\n userReference !== \"\"\n ? userReference.split(\",\").map(userReference => userReference.trim())\n : [];\n\n return references;\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"dashboard_root__2kJWX\",\"container\":\"dashboard_container__1pcls\",\"chartContainer\":\"dashboard_chartContainer__2PBLA\",\"legendRoot\":\"dashboard_legendRoot__1E3Y4\",\"legendItem\":\"dashboard_legendItem__2dJRo\",\"legendSvg\":\"dashboard_legendSvg__3mDKq\",\"header\":\"dashboard_header__EVNA6\",\"dateRange\":\"dashboard_dateRange__2Kymh\",\"countHeader\":\"dashboard_countHeader__3giEN\",\"countCell\":\"dashboard_countCell__Ob2S1\",\"valueSpan\":\"dashboard_valueSpan__3x-D4\",\"totalCell\":\"dashboard_totalCell__RhDKh\",\"totalLabel\":\"dashboard_totalLabel__3sD89\",\"calendar\":\"dashboard_calendar__1-6W_\",\"calendarPopup\":\"dashboard_calendarPopup__2vmCA\",\"calendarContainer\":\"dashboard_calendarContainer__VMBIY\",\"rdrStaticRangeLabel\":\"dashboard_rdrStaticRangeLabel__asg_4\",\"rdrDateRangePickerWrapper\":\"dashboard_rdrDateRangePickerWrapper__3aScK\",\"calendar-arrow\":\"dashboard_calendar-arrow__34lnY\",\"react-calendar__navigation\":\"dashboard_react-calendar__navigation__1d-Ve\",\"react-calendar__navigation__arrow\":\"dashboard_react-calendar__navigation__arrow__3Vqla\",\"react-calendar__month-view__weekdays\":\"dashboard_react-calendar__month-view__weekdays__2EgXw\",\"react-calendar__month-view__days\":\"dashboard_react-calendar__month-view__days__2yopK\",\"active\":\"dashboard_active__2OpWC\"};","import React from \"react\";\ninterface IProps {\n title?: string;\n content?: string | React.ReactElement | React.ReactFragment;\n t?: any;\n}\n\ninterface IState {\n error?: Error;\n}\n\nclass ErrorBoundary extends React.PureComponent {\n state: IState = {};\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n this.setState({ error });\n console.error(\"Render Error:\", error, errorInfo);\n }\n\n render() {\n if (this.state.error) {\n let { t } = this.props;\n const { title = t(\"Oops! Something went wrong :(\") } = this.props;\n const content =\n this.props.content || t(\"Please reload the page and try again.\");\n\n return (\n
\n

\n {title}\n

\n

{content}

\n
\n );\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import React from \"react\";\nimport ErrorBoundary from \"../../shared/ErrorBoundary\";\n\nconst Content: React.FC = () => {\n return (\n <>\n

Please reload the page and try again.

\n
\n window.location.reload()}\n style={{ minWidth: 80 }}\n >\n Reload\n \n
\n \n );\n};\n\nconst content = ;\n\nconst AppErrorBoundary: React.FC = ({ children }) => {\n return {children};\n};\n\nexport default AppErrorBoundary;\n","import React, { createContext, useEffect, useState, useContext } from \"react\";\nimport Wait from \"./Wait\";\nimport { loadConfig, IAppConfig } from \"../services/appConfigService\";\n\nexport const configContext = createContext(undefined);\n\nexport const AppConfigProvider: React.FC = ({ children }) => {\n const [config, setConfig] = useState();\n useEffect(() => {\n loadConfig()\n .then(setConfig)\n .catch(() => setConfig(null));\n }, []);\n\n // Config is loading ....\n if (typeof config === \"undefined\") {\n return (\n
\n
\n \n
\n
\n );\n }\n\n // Failed to load config\n if (config === null) {\n return (\n
\n

\n Error :(\n

\n

Failed to load application configuration.

\n
\n );\n }\n\n // Config loaded ...\n // console.log(\"CONFIG LOADED:\", config);\n return (\n {children}\n );\n};\n\nconst useAppConfig = () => {\n const config = useContext(configContext);\n if (!config) {\n throw new Error(\"AppConfig not available on context!\");\n }\n return config;\n};\n\nexport default useAppConfig;\n","export default __webpack_public_path__ + \"static/media/dexis-logo.d6b3a8e7.png\";","export default __webpack_public_path__ + \"static/media/beta.0a46644c.svg\";","import Box from \"@mui/material/Box\";\nimport { configContext } from \"../../../shared/useAppConfig\";\nimport { getBackendVersionAsync } from \"../../../services/userService\";\nimport React, { useMemo, useState } from \"react\";\nimport { useTranslation } from 'react-i18next'; \n\n\ninterface IInfoDialogProps {\n isOpen: boolean;\n close: () => void;\n}\n\nexport default function AppInfoDialog() {\n const config = React.useContext(configContext);\n const [backendVersion, setBackendVersion] = useState();\n const {t} = useTranslation();\n\n useMemo(\n async () =>\n await getBackendVersionAsync().then(value => setBackendVersion(value)),\n []\n ); \n\n return (\n
\n \n

\n {t('AppInfo')}:\n

\n
    \n {console.log(backendVersion)}\n
  • {t('AppInfo')}: {config?.version}
  • \n
  • {t('BackendVersion')}: {backendVersion}
  • \n
  • {t('ReleaseDate')}: {config?.release_date}
  • \n
  • {t('CommitHash')}: {config?.git_commit}
  • \n
\n
\n
\n );\n}\n","import { RecordStatus } from \"../shared/enums/RecordStatus\";\r\nimport { UserRole } from \"../shared/enums/UserRole\";\r\nimport http from \"./api/http\";\r\nimport getLoadedConfig from \"./appConfigService\";\r\n\r\nexport interface IUserModel {\r\n recordId: string;\r\n userName: string;\r\n emailAddress: string;\r\n role: string;\r\n}\r\nexport interface IUserList {\r\n count?: number;\r\n value: IUserModel[];\r\n}\r\n\r\nexport interface IInfoModel {\r\n title: string;\r\n build: string;\r\n}\r\n\r\nexport interface IUserRequest {\r\n userName: string;\r\n emailAddress: string;\r\n role: UserRole;\r\n}\r\n\r\nexport interface IEditUserRequest extends IUserRequest{\r\n recordId: string;\r\n}\r\n\r\nexport const addUserAsync = async (user: IUserRequest): Promise => {\r\n const config = getLoadedConfig();\r\n\r\n const req = await http.post(config.apiUrl + \"Users/CreateCSDUser\", user);\r\n\r\n return req.data[0];\r\n};\r\n\r\nexport const editUserAsync = async (\r\n user: IEditUserRequest\r\n): Promise => {\r\n const config = getLoadedConfig();\r\n\r\n const req = await http.put(config.apiUrl + `Users/UpdateCSDUser?key=${user.recordId}`, user);\r\n\r\n return req.data[0];\r\n};\r\n\r\nexport const deleteUserAsync = async (recordId: string) => {\r\n const config = getLoadedConfig();\r\n\r\n const req = await http.delete(config.apiUrl + `Users/DeleteCSDUser?key=${recordId}`);\r\n\r\n return req.data;\r\n};\r\n\r\nexport const getBackendVersionAsync = async () => {\r\n const config = getLoadedConfig();\r\n\r\n let url = new URL(config.apiUrl.toString());\r\n\r\n const req = await http.get(url.origin + \"/version\");\r\n\r\n return req.data.build;\r\n};\r\n","import i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\n\r\nimport fr from './translate/fr.json'\r\nimport en from './translate/en.json'\r\n\r\n// the translations ressources\r\nconst resources = {\r\n en: {\r\n translation: en\r\n },\r\n fr: {\r\n translation: fr\r\n }\r\n};\r\n\r\ni18n\r\n .use(initReactI18next) // passes i18n down to react-i18next\r\n .init({\r\n resources,\r\n lng: \"en\", // language to use, more information here: https://www.i18next.com/overview/configuration-options#languages-namespaces-resources\r\n // you can use the i18n.changeLanguage function to change the language manually: https://www.i18next.com/overview/api#changelanguage\r\n\r\n interpolation: {\r\n escapeValue: false\r\n }\r\n });\r\n\r\n export default i18n;","import React, { useCallback, useEffect, useState } from \"react\";\nimport { AccountInfo } from \"@azure/msal-browser\";\nimport css from \"./PageHeader.module.scss\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport Menu from \"@mui/material/Menu\";\nimport logo from \"../../assets/images/dexis-logo.png\";\nimport betaLogo from \"../../assets/images/beta.svg\";\nimport FormControl from \"@mui/material/FormControl\";\nimport NativeSelect from \"@mui/material/NativeSelect\";\nimport { configContext } from \"../../shared/useAppConfig\";\nimport useAuthService from \"../../services/authService\";\nimport { Avatar, Divider, ListItemIcon } from \"@mui/material\";\nimport PersonIcon from \"@mui/icons-material/Person\";\nimport InfoIcon from \"@mui/icons-material/Info\";\nimport ExitToAppIcon from \"@mui/icons-material/ExitToApp\";\nimport Dialogs from \"../Dialogs\";\nimport { DialogType } from \"../../shared/enums/DialogType\";\nimport AppInfoDialog from \"../Dialogs/AppInfoDialog/AppInfoDialog\";\nimport i18n from '../../i18n';\nimport { useTranslation } from 'react-i18next'; \nimport i18next from \"i18next\";\nimport { Link } from \"react-router-dom\";\n\n\nexport interface IProps {\n account: AccountInfo | null;\n}\n\nconst langArray:{codeLang:string, label: string}[] = [\n {\n codeLang: 'en',\n label: 'English'\n },\n {\n codeLang: 'fr',\n label: 'Français'\n }\n];\n\nexport const Header: React.FC = () => {\n const [anchorEl, setAnchorEl] = useState(null);\n const [userDisplayName, setUserDisplayName] = useState(\"Uknown\");\n const [lang, setLang] = useState<{ codeLang: string; label: string }>(\n langArray.find(lang => lang.codeLang === i18next.resolvedLanguage) ?? langArray[0]\n );\n const [userAvatar, setUserAvatar] = useState(\"U\");\n\n const openBoolean = Boolean(anchorEl);\n\n const {t} = useTranslation();\n const authService = useAuthService();\n\n const logout = useCallback(\n async () => await authService.logout(),\n [authService]\n );\n\n\n useEffect(() => {\n const fetchUserDetails = async () => {\n const avatar = await authService.getUserAvatar();\n setUserAvatar(avatar);\n const displayName = await authService.getDisplayName();\n setUserDisplayName(displayName);\n };\n\n fetchUserDetails();\n }, [authService]);\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleMenu = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleChange = (\n event: React.ChangeEvent<{ name?: string; value: string }>\n ) => {\n const value = event.target.value;\n const lang = langArray.find(lang => lang.codeLang === value) ?? langArray[0];\n i18n.changeLanguage(value);\n setLang(lang);\n };\n\n const config = React.useContext(configContext);\n\n const [showAppInfoDialog, setShowAppInfoDialog] = useState(false);\n\n return (\n <>\n
\n \n
\n \"Dexis\n
\n \"beta\n
\n
\n \n
\n
\n {userAvatar}\n
\n \n \n \n \n \n {userDisplayName}\n \n \n setShowAppInfoDialog(true)}>\n \n \n \n {t('Info')}\n \n \n \n \n \n \n {t('Logout')}\n \n \n \n \n {langArray.map( (lang:{codeLang: string, label: string}) => )}\n \n \n
\n
\n {showAppInfoDialog && (\n setShowAppInfoDialog(false)}\n content={}\n />\n )}\n \n );\n};\n\nexport default Header;\n","import React, { useCallback } from \"react\";\nimport css from \"./Login.module.scss\";\nimport Button from \"@mui/material/Button\";\nimport ExitToAppIcon from '@mui/icons-material/ExitToApp';\nimport useAuthService from \"../../services/authService\";\nimport { useTranslation } from 'react-i18next';\n\n\n\nconst Login: React.FC<{ isEmployeeLogin: boolean }> = ({ isEmployeeLogin }) => {\n const authService = useAuthService(); \n const {t} = useTranslation();\n const doLogin = useCallback(() => {\n authService.login(isEmployeeLogin);\n }, [authService, isEmployeeLogin]);\n\n return (\n
\n
\n
\n
\n
\n
\n
\n

IS Fleet Portal

\n
\n }\n style={{ minWidth: 120 }}\n onClick={doLogin}\n >\n {t('LOGIN')}\n \n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default Login;\n","export default __webpack_public_path__ + \"static/media/device-list.0b11309e.svg\";","export default __webpack_public_path__ + \"static/media/device-list-white.81971d3a.svg\";","export default __webpack_public_path__ + \"static/media/member-configuration.d5daed69.svg\";","export default __webpack_public_path__ + \"static/media/member-configuration-white.52bdd129.svg\";","export default __webpack_public_path__ + \"static/media/user-details.1d0a5ad7.svg\";","export default __webpack_public_path__ + \"static/media/user-details-white.b15003dc.svg\";","export default __webpack_public_path__ + \"static/media/help.0f95912c.svg\";","import React from \"react\";\r\nimport {\r\n IUserDataFlp,\r\n IUserColumnFlp,\r\n} from \"../../shared/interfaces/IUserDataFlp\";\r\nimport {\r\n IUserRequest,\r\n getUsersFlpAsync,\r\n} from \"../../services/userServiceFlp\";\r\nimport DenseTable from \"../Tables/DenseTable\";\r\nimport classes from './UserConfFlp.module.scss'\r\n\r\ninterface IProps {\r\n type: string;\r\n}\r\n\r\nconst usersFlpColumns: IUserColumnFlp[] = [\r\n { id: \"recordId\", label: \"No\", minWidth: 10 },\r\n { id: \"firstName\", label: \"first name\", minWidth: 50 },\r\n { id: \"surname\", label: \"surname\", minWidth: 50 },\r\n { id: \"emailAddress\", label: \"email\", minWidth: 50 },\r\n { id: \"role\", label: \"role\", minWidth: 50 },\r\n { id: \"actions\", label: \"Actions\", minWidth: 89, align: \"left\" },\r\n];\r\n\r\nexport default function UsersFlpConf(props: IProps) {\r\n const { type } = props;\r\n\r\n const [isLoading, setLoading] = React.useState(false);\r\n const [rowsData, setRowsData] = React.useState([]);\r\n\r\n const usersRows: IUserDataFlp[] = [];\r\n\r\n const fetchUserInfo = () => {\r\n getUsersFlpAsync(false).then((data: IUserRequest[]) => {\r\n for (const value of data) {\r\n usersRows.push({\r\n recordId: value.recordId,\r\n firstName: value.firstName,\r\n surname: value.surname,\r\n emailAddress: value.emailAddress,\r\n role: value.role,\r\n });\r\n }\r\n setRowsData(usersRows);\r\n setLoading(true);\r\n });\r\n };\r\n\r\n React.useEffect(() => {\r\n fetchUserInfo();\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","export enum TagsInputType {\n LICENCE_KEYS = \"licenceKeys\",\n SAP_ACCOUNT = \"sapAccount\"\n}\n","import React from \"react\";\nimport { licenceKeysRegex, CustomerRefRegex } from \"../../shared/utils/utils\";\nimport Button from \"@mui/material/Button\";\nimport \"./TagsInput.scss\";\nimport { TagsInputType } from \"../../shared/enums/TagsInputType\";\n\ninterface IProps {\n type: string;\n licenceType?: string;\n initValues?: string[];\n id: string;\n onValueChange?: (value: string | string[]) => void;\n setValidated?: (value: boolean) => void;\n fieldConflictError?: string;\n}\n\nconst TagsInput = (props: IProps) => {\n const { type, id, initValues, onValueChange, setValidated, licenceType, fieldConflictError } =\n props;\n const tagsInit =\n typeof initValues === \"object\" && initValues.length > 0 ? initValues : [];\n const [tags, setTags] = React.useState(tagsInit);\n const [inputValue, setInputValue] = React.useState(\"\");\n const [error, setError] = React.useState(false);\n const [errorLicenceKeys, setErrorLicenceKeys] = React.useState([]);\n const [errorCustomerRefs, setErrorCustomerRefs] = React.useState([]);\n const errorText = `${\n type === TagsInputType.LICENCE_KEYS\n ? `License key ${errorLicenceKeys[0]}`\n : `Customer Ref ${errorCustomerRefs[0]}`\n } not valid.`;\n const helpText = `Supports multiple ${\n type === TagsInputType.LICENCE_KEYS ? \"license keys\" : \"Customer Refs\"\n } with a comma separator. Press “enter” to confirm.`;\n\n const removeTag = (index: number) => {\n const isLicenceKeyType = type === TagsInputType.LICENCE_KEYS;\n\n const newTags = [...tags];\n\n // Remove the tag from the error list if present\n var newErrorLicenceKeys = [...errorLicenceKeys];\n var newErrorCustomerRefs = [...errorCustomerRefs];\n\n const pos = isLicenceKeyType\n ? newErrorLicenceKeys?.findIndex(val => val === newTags[index])\n : newErrorCustomerRefs?.findIndex(val => val === newTags[index]);\n if (pos !== -1) {\n isLicenceKeyType\n ? newErrorLicenceKeys.splice(pos, 1)\n : newErrorCustomerRefs.splice(pos, 1);\n }\n\n // Remove the tag from tags list\n newTags.splice(index, 1);\n\n // Check if the list of errors is empty\n const hasError = isLicenceKeyType\n ? newErrorLicenceKeys.length > 0\n : newErrorCustomerRefs.length > 0;\n setError(hasError);\n setValidated?.(!hasError && newTags.length > 0);\n\n onValueChange?.(newTags);\n\n // Update state variables\n setTags(newTags);\n setErrorLicenceKeys(newErrorLicenceKeys);\n setErrorCustomerRefs(newErrorCustomerRefs);\n };\n\n const validateInputs = (val: string) => {\n // Ignore empty inputs\n if (val.trim() === \"\") {\n return;\n }\n\n setInputValue(\"\");\n val = val.toUpperCase();\n const newSelectedItem = [...tags];\n var newErrorLicenceKeys = [...errorLicenceKeys];\n var newErrorCustomerRefs = [...errorCustomerRefs];\n\n if (tags.includes(val)) {\n return;\n }\n\n let noDuplicate = [...new Set(val.split(\",\"))];\n noDuplicate.forEach(async (v: any) => {\n newSelectedItem.push(v);\n if (type === TagsInputType.LICENCE_KEYS) {\n if (!licenceKeysRegex(v)) {\n setError(true);\n newErrorLicenceKeys = [...newErrorLicenceKeys, v];\n setValidated?.(false);\n } else {\n // Validate the key against the licensing server\n // const valid = await validateTokenAsync(v, licenceType);\n // if (valid) {\n // addNewLicenceKey(v);\n // if (newErrorLicenceKeys.length === 0) {\n // // We only need to set validated to true for the first added tag\n // // After, a valid tag does not change the global state, only invalid tags do\n // setValidated?.(true);\n // }\n // } else {\n // setError(true);\n // newErrorLicenceKeys = [...newErrorLicenceKeys, v];\n // setValidated?.(false);\n // }\n }\n // Update errors list\n setErrorLicenceKeys(newErrorLicenceKeys);\n }\n if (type === TagsInputType.SAP_ACCOUNT) {\n if (!CustomerRefRegex(v)) {\n setError(true);\n newErrorCustomerRefs = [...newErrorCustomerRefs, v];\n setValidated?.(false);\n } else {\n onValueChange?.(v);\n if (newErrorCustomerRefs.length === 0) {\n // We only need to set validated to true for the first added tag\n // After, a valid tag does not change the global state, only invalid tags do\n setValidated?.(true);\n }\n }\n // Update errors list\n setErrorCustomerRefs(newErrorCustomerRefs);\n }\n });\n setTags([...newSelectedItem]);\n };\n\n const inputKeyDown = (e: any) => {\n let val = e.target.value;\n if (e.key === \"Enter\" && val) {\n e.preventDefault();\n validateInputs(val);\n } else if (e.key === \"Backspace\" && !val) {\n e.preventDefault();\n removeTag(tags.length - 1);\n }\n };\n\n const onBlur = (e: any) => {\n let val = e.target.value;\n e.preventDefault();\n validateInputs(val);\n };\n\n React.useEffect(() => {\n if (type === TagsInputType.SAP_ACCOUNT) {\n onValueChange?.(tags);\n }\n }, [onValueChange, tags, type]);\n\n return (\n
\n
\n
    \n {tags.map((tag: string, index: number) => (\n \n {tag}\n {\n removeTag(index);\n }}\n >\n x\n \n \n ))}\n setInputValue(e.target.value)}\n onBlur={onBlur}\n />\n
\n
\n

{helpText}

\n {error &&

{errorText}

}\n {fieldConflictError?.toLowerCase() === \"value\" &&

This licence key(s) already exist.

}\n
\n );\n};\n\nexport default TagsInput;\n","import React from \"react\";\nimport css from \"./AddMemberDialog.module.scss\";\nimport TagsInput from \"../../TagsInput\";\nimport {\n updateEmailFLP,\n updateMembersNameFlp,\n updateUserFirstNameFlp,\n updateUserSurnameFlp,\n updateMembersUserReferenceFlp,\n updateRecordId,\n updateUserRecordId,\n IMemberResponseFlp,\n} from \"../../../services/memberServiceFlp\";\nimport isEmail from \"validator/lib/isEmail\";\nimport { ConvertArrayReferences } from \"../../../shared/utils/utils\";\nimport { useTranslation } from 'react-i18next'; \n\ninterface IProps {\n editRowData?: IMemberResponseFlp;\n setValidated?: (value: boolean) => void;\n}\n\nexport default function AddEditMemberDialog(props: IProps) {\n const { editRowData, setValidated } = props;\n const member: IMemberResponseFlp | undefined = editRowData;\n\n const [membersName, setMembersName] = React.useState(member?.name || \"\");\n const [userEmail, setUserEmail] = React.useState(\n member?.user?.emailAddress || \"\"\n );\n const [userFirstName, setUserFirstName] = React.useState(\n member?.user?.firstName || \"\"\n );\n const [userSurname, setUserSurname] = React.useState(\n member?.user?.surname || \"\"\n );\n const [emailInvalidText, setEmailInvalidText] = React.useState(\"\");\n const [userReference, setUserReference] = React.useState(\n member && member.userReference\n ? ConvertArrayReferences(member.userReference)\n : []\n );\n const [localValidated, setLocalValidated] = React.useState(false);\n const [tagsinputValidated, setTagsinputValidated] = React.useState(\n member ? true : false\n );\n const {t} = useTranslation();\n\n React.useEffect(() => {\n updateRecordId(undefined === member ? \"\" : member?.recordId);\n updateUserRecordId(undefined === member ? \"\" : member?.user?.recordId);\n updateMembersNameFlp(membersName);\n updateUserFirstNameFlp(userFirstName);\n updateUserSurnameFlp(userSurname);\n updateEmailFLP(isEmail(userEmail) ? userEmail : \"\");\n updateMembersUserReferenceFlp(userReference);\n\n // Validate formular\n setLocalValidated(\n membersName !== \"\" &&\n userFirstName !== \"\" &&\n userSurname !== \"\" &&\n userEmail !== \"\" &&\n userReference.length !== 0\n );\n }, [\n member,\n membersName,\n userFirstName,\n userSurname,\n userEmail,\n userReference,\n ]);\n\n React.useEffect(() => {\n setValidated?.(tagsinputValidated && localValidated);\n }, [tagsinputValidated, localValidated]);\n\n const tagsInputType = \"sapAccount\";\n\n return (\n
\n
\n
\n \n setMembersName(e.target.value)}\n />\n
\n
\n \n setUserFirstName(e.target.value)}\n />\n
\n
\n \n setUserSurname(e.target.value)}\n />\n
\n
\n \n {\n !isEmail(userEmail)\n ? setEmailInvalidText(\"Invalid email !\")\n : setEmailInvalidText(\"\");\n }}\n onChange={e => setUserEmail(e.target.value)}\n />\n {emailInvalidText !== \"\" && (\n

{emailInvalidText}

\n )}\n
\n
\n \n \n setUserReference(values as string[])\n }\n setValidated={setTagsinputValidated}\n />\n
\n {/*
\n {\n setInvite(!invite);\n }}\n name=\"invite\" />}\n />\n
*/}\n
\n
\n );\n}\n","import { Button, CircularProgress } from \"@mui/material\";\nimport { Alert } from \"@mui/material\";\nimport GeneralWarning from \"../../../assets/images/indications/ico-GeneralWarning.svg\";\nimport css from \"./ConfirmDeleteDialog.module.scss\";\nimport { useTranslation } from 'react-i18next'; \n\n\ninterface IProps {\n deletedData?: () => void;\n errorMessage?: string;\n closeDialog?: () => void;\n isLoading?: boolean;\n}\n\nexport default function ConfirmDeleteDialog(props: IProps) {\n const { deletedData, closeDialog, errorMessage, isLoading } = props; \n const {t} = useTranslation();\n\n return (\n <>\n {errorMessage && {errorMessage}}\n
\n \n

{t('Delete')}

\n

\n {t('DeleteCofirmMsg')}
\n {t('NoUndoMsg')}\n

\n
\n {deletedData &&\n closeDialog && ( // remove this condition when the refacto is DONE\n
\n \n {t('Cancel')}\n \n deletedData?.()}\n variant=\"outlined\"\n className=\"btn-confirm\"\n disabled={isLoading}\n >\n {isLoading ? (\n \n ) : (\n \"Delete\"\n )}\n \n
\n )}\n \n );\n}\n","import React, { useState, useEffect } from 'react'\r\n\r\n// Interface\r\nimport IInputForm from './IInputForm';\r\n\r\n//Style\r\nimport styles from './InputForm.module.scss'\r\n\r\n\r\nconst InputForm: React.FC = (props) => {\r\n const {\r\n title,\r\n onChange,\r\n value,\r\n placeholder,\r\n className,\r\n disabled\r\n } = props\r\n\r\n const [localValue, setValueLabel] = useState(value)\r\n\r\n useEffect(() => {\r\n setValueLabel(value)\r\n }, [value])\r\n\r\n return(\r\n
\r\n { title && }\r\n {\r\n setValueLabel(event.target.value)\r\n onChange(event.target.value)\r\n }}\r\n disabled={!!disabled}\r\n />\r\n
\r\n )\r\n}\r\n\r\nexport default InputForm","import InputForm from \"./InputForm\";\r\n\r\nexport default InputForm","import Dialog from \"./Dialog\";\r\n\r\nexport default Dialog","\r\nimport { Dialog as DialogMui, DialogContent, DialogTitle, Box } from \"@mui/material\";\r\n\r\n// Interface\r\nimport IDialog from './IDialog';\r\n\r\n//Style\r\nimport styles from './Dialog.module.scss'\r\n\r\nexport default function Dialog(props: IDialog) {\r\n const { title, children, open, onClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\n","import React, { useState } from 'react'\r\nimport PropTypes from \"prop-types\";\r\nimport IconButton from \"@mui/material/IconButton\";\r\nimport Input from \"@mui/material/Input\";\r\nimport Paper from \"@mui/material/Paper\";\r\nimport ClearIcon from \"@mui/icons-material/Clear\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport withStyles from \"@mui/material/styles/withStyles\";\r\nimport classNames from \"classnames\";\r\nimport classes from './SearchBar.module.scss'\r\n\r\n// Interface\r\nimport ISearchBar from './ISearchBar';\r\n\r\n// MaterialUI\r\n// import MaterialSearchBar from 'material-ui-search-bar';\r\nimport { Button, Tooltip } from \"@mui/material\";\r\n\r\n\r\nconst SearchBar: React.FC = (props) => {\r\n const {\r\n buttonLabel,\r\n placeholder,\r\n tooltipText,\r\n onRequestSearch,\r\n onCancelSearch,\r\n } = props\r\n\r\n const inputRef = React.useRef();\r\n const [value, setValue] = useState(\"\");\r\n\r\n const handleCancel = React.useCallback(() => {\r\n setValue(\"\");\r\n if (onCancelSearch) {\r\n onCancelSearch();\r\n }\r\n }, [onCancelSearch]);\r\n\r\n const handleRequestSearch = React.useCallback(() => {\r\n if (onRequestSearch) {\r\n onRequestSearch(value);\r\n }\r\n }, [onRequestSearch, value]);\r\n\r\n const handleKeyUp = React.useCallback(\r\n (e) => {\r\n if (e.charCode === 13 || e.key === \"Enter\") {\r\n handleRequestSearch();\r\n }\r\n },\r\n [handleRequestSearch, handleCancel]\r\n );\r\n\r\n return(\r\n
\r\n \r\n
\r\n \r\n
\r\n {\r\n setValue((v) => v.trim());\r\n }}\r\n value={value}\r\n onChange={(e) => {\r\n setValue(e.target.value)\r\n }}\r\n onKeyUp={(e) => {\r\n if (e.charCode === 13 || e.key === \"Enter\") {\r\n handleRequestSearch();\r\n }\r\n }}\r\n fullWidth\r\n className={classes.searchInput}\r\n disableUnderline\r\n placeholder={placeholder}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n onRequestSearch(value)}\r\n >\r\n {buttonLabel}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default SearchBar","import SearchBar from './SearchBar';\r\n\r\nexport default SearchBar","export enum CountryCode {\n AD = \"Andorra\",\n AE = \"United Arab Emirates\",\n AF = \"Afghanistan\",\n AG = \"Antigua and Barbuda\",\n AI = \"Anguilla\",\n AL = \"Albania\",\n AM = \"Armenia\",\n AO = \"Angola\",\n AQ = \"Antarctica\",\n AR = \"Argentina\",\n AS = \"American Samoa\",\n AT = \"Austria\",\n AU = \"Australia\",\n AW = \"Aruba\",\n AX = \"Aland Islands\",\n AZ = \"Azerbaijan\",\n BA = \"Bosnia and Herzegovina\",\n BB = \"Barbados\",\n BD = \"Bangladesh\",\n BE = \"Belgium\",\n BF = \"Burkina Faso\",\n BG = \"Bulgaria\",\n BH = \"Bahrain\",\n BI = \"Burundi\",\n BJ = \"Benin\",\n BL = \"Saint Barthelemey\",\n BM = \"Bermuda\",\n BN = \"Brunei Darussalam\",\n BO = \"Bolivia\",\n BQ = \"Bonaire, Saint Eustatius and Saba\",\n BR = \"Brazil\",\n BS = \"Bahamas\",\n BT = \"Bhutan\",\n BV = \"Bouvet Island\",\n BW = \"Botswana\",\n BY = \"Belarus\",\n BZ = \"Belize\",\n CA = \"Canada\",\n CC = \"Cocos (Keeling) Islands\",\n CD = \"Congo, The Democratic Republic of the\",\n CF = \"Central African Republic\",\n CG = \"Congo\",\n CH = \"Switzerland\",\n CI = \"Cote d'Ivoire\",\n CK = \"Cook Islands\",\n CL = \"Chile\",\n CM = \"Cameroon\",\n CN = \"China\",\n CO = \"Colombia\",\n CR = \"Costa Rica\",\n CU = \"Cuba\",\n CV = \"Cape Verde\",\n CW = \"Curacao\",\n CX = \"Christmas Island\",\n CY = \"Cyprus\",\n CZ = \"Czech Republic\",\n DE = \"Germany\",\n DJ = \"Djibouti\",\n DK = \"Denmark\",\n DM = \"Dominica\",\n DO = \"Dominican Republic\",\n DZ = \"Algeria\",\n EC = \"Ecuador\",\n EE = \"Estonia\",\n EG = \"Egypt\",\n EH = \"Western Sahara\",\n ER = \"Eritrea\",\n ES = \"Spain\",\n ET = \"Ethiopia\",\n FI = \"Finland\",\n FJ = \"Fiji\",\n FK = \"Falkland Islands (Malvinas)\",\n FM = \"Micronesia, Federated States of\",\n FO = \"Faroe Islands\",\n FR = \"France\",\n GA = \"Gabon\",\n GB = \"United Kingdom\",\n GD = \"Grenada\",\n GE = \"Georgia\",\n GF = \"French Guiana\",\n GG = \"Guernsey\",\n GH = \"Ghana\",\n GI = \"Gibraltar\",\n GL = \"Greenland\",\n GM = \"Gambia\",\n GN = \"Guinea\",\n GP = \"Guadeloupe\",\n GQ = \"Equatorial Guinea\",\n GR = \"Greece\",\n GS = \"South Georgia and the South Sandwich Islands\",\n GT = \"Guatemala\",\n GU = \"Guam\",\n GW = \"Guinea-Bissau\",\n GY = \"Guyana\",\n HK = \"Hong Kong\",\n HM = \"Heard Island and McDonald Islands\",\n HN = \"Honduras\",\n HR = \"Croatia\",\n HT = \"Haiti\",\n HU = \"Hungary\",\n ID = \"Indonesia\",\n IE = \"Ireland\",\n IL = \"Israel\",\n IM = \"Isle of Man\",\n IN = \"India\",\n IO = \"British Indian Ocean Territory\",\n IQ = \"Iraq\",\n IR = \"Iran, Islamic Republic of\",\n IS = \"Iceland\",\n IT = \"Italy\",\n JE = \"Jersey\",\n JM = \"Jamaica\",\n JO = \"Jordan\",\n JP = \"Japan\",\n KE = \"Kenya\",\n KG = \"Kyrgyzstan\",\n KH = \"Cambodia\",\n KI = \"Kiribati\",\n KM = \"Comoros\",\n KN = \"Saint Kitts and Nevis\",\n KP = \"Korea, Democratic People's Republic of\",\n KR = \"Korea, Republic of\",\n KW = \"Kuwait\",\n KY = \"Cayman Islands\",\n KZ = \"Kazakhstan\",\n LA = \"Lao People's Democratic Republic\",\n LB = \"Lebanon\",\n LC = \"Saint Lucia\",\n LI = \"Liechtenstein\",\n LK = \"Sri Lanka\",\n LR = \"Liberia\",\n LS = \"Lesotho\",\n LT = \"Lithuania\",\n LU = \"Luxembourg\",\n LV = \"Latvia\",\n LY = \"Libyan Arab Jamahiriya\",\n MA = \"Morocco\",\n MC = \"Monaco\",\n MD = \"Moldova, Republic of\",\n ME = \"Montenegro\",\n MF = \"Saint Martin\",\n MG = \"Madagascar\",\n MH = \"Marshall Islands\",\n MK = \"Macedonia\",\n ML = \"Mali\",\n MM = \"Myanmar\",\n MN = \"Mongolia\",\n MO = \"Macao\",\n MP = \"Northern Mariana Islands\",\n MQ = \"Martinique\",\n MR = \"Mauritania\",\n MS = \"Montserrat\",\n MT = \"Malta\",\n MU = \"Mauritius\",\n MV = \"Maldives\",\n MW = \"Malawi\",\n MX = \"Mexico\",\n MY = \"Malaysia\",\n MZ = \"Mozambique\",\n NA = \"Namibia\",\n NC = \"New Caledonia\",\n NE = \"Niger\",\n NF = \"Norfolk Island\",\n NG = \"Nigeria\",\n NI = \"Nicaragua\",\n NL = \"Netherlands\",\n NO = \"Norway\",\n NP = \"Nepal\",\n NR = \"Nauru\",\n NU = \"Niue\",\n NZ = \"New Zealand\",\n OM = \"Oman\",\n PA = \"Panama\",\n PE = \"Peru\",\n PF = \"French Polynesia\",\n PG = \"Papua New Guinea\",\n PH = \"Philippines\",\n PK = \"Pakistan\",\n PL = \"Poland\",\n PM = \"Saint Pierre and Miquelon\",\n PN = \"Pitcairn\",\n PR = \"Puerto Rico\",\n PS = \"Palestinian Territory\",\n PT = \"Portugal\",\n PW = \"Palau\",\n PY = \"Paraguay\",\n QA = \"Qatar\",\n RE = \"Reunion\",\n RO = \"Romania\",\n RS = \"Serbia\",\n RU = \"Russian Federation\",\n RW = \"Rwanda\",\n SA = \"Saudi Arabia\",\n SB = \"Solomon Islands\",\n SC = \"Seychelles\",\n SD = \"Sudan\",\n SE = \"Sweden\",\n SG = \"Singapore\",\n SH = \"Saint Helena\",\n SI = \"Slovenia\",\n SJ = \"Svalbard and Jan Mayen\",\n SK = \"Slovakia\",\n SL = \"Sierra Leone\",\n SM = \"San Marino\",\n SN = \"Senegal\",\n SO = \"Somalia\",\n SR = \"Suriname\",\n SS = \"South Sudan\",\n ST = \"Sao Tome and Principe\",\n SV = \"El Salvador\",\n SX = \"Sint Maarten\",\n SY = \"Syrian Arab Republic\",\n SZ = \"Swaziland\",\n TC = \"Turks and Caicos Islands\",\n TD = \"Chad\",\n TF = \"French Southern Territories\",\n TG = \"Togo\",\n TH = \"Thailand\",\n TJ = \"Tajikistan\",\n TK = \"Tokelau\",\n TL = \"Timor-Leste\",\n TM = \"Turkmenistan\",\n TN = \"Tunisia\",\n TO = \"Tonga\",\n TR = \"Turkey\",\n TT = \"Trinidad and Tobago\",\n TV = \"Tuvalu\",\n TW = \"Taiwan\",\n TZ = \"Tanzania, United Republic of\",\n UA = \"Ukraine\",\n UG = \"Uganda\",\n UM = \"United States Minor Outlying Islands\",\n US = \"United States\",\n UY = \"Uruguay\",\n UZ = \"Uzbekistan\",\n VA = \"Holy See (Vatican City State)\",\n VC = \"Saint Vincent and the Grenadines\",\n VE = \"Venezuela\",\n VG = \"Virgin Islands, British\",\n VI = \"Virgin Islands, U.S.\",\n VN = \"Vietnam\",\n VU = \"Vanuatu\",\n WF = \"Wallis and Futuna\",\n WS = \"Samoa\",\n YE = \"Yemen\",\n YT = \"Mayotte\",\n ZA = \"South Africa\",\n ZM = \"Zambia\",\n ZW = \"Zimbabwe\",\n}","import React, { useState } from 'react'\r\n\r\n// Interface\r\nimport IAddressField, {IAddress} from './IAddressField';\r\n\r\n//Style\r\nimport styles from './AddressField.module.scss'\r\n\r\nimport { InputForm } from '../../Atoms';\r\nimport { CountryCode } from '../../../../shared/enums/CountryCode';\r\nimport { MenuItem, Select } from '@mui/material';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n\r\nconst AddressField: React.FC = (props) => {\r\n const {\r\n address,\r\n onChange,\r\n disabled,\r\n } = props\r\n\r\n const { t } = useTranslation();\r\n const [ addressLocal, setAddressLocal ] = useState(address);\r\n\r\n \r\n const handleOnChange = (address: IAddress) => {\r\n setAddressLocal(address);\r\n onChange(address)\r\n };\r\n\r\n return(\r\n
\r\n handleOnChange({\r\n ...addressLocal,\r\n line1: newLine\r\n })}\r\n disabled={!!disabled}\r\n />\r\n
\r\n handleOnChange({\r\n ...addressLocal,\r\n city: newCity\r\n })}\r\n disabled={!!disabled}\r\n />\r\n handleOnChange({\r\n ...addressLocal,\r\n region: newRegion\r\n })}\r\n disabled={!!disabled}\r\n />\r\n
\r\n
\r\n handleOnChange({\r\n ...addressLocal,\r\n zip: newZip\r\n })}\r\n disabled={!!disabled}\r\n />\r\n \r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default AddressField","import AddressField from './AddressField';\r\n\r\nexport default AddressField","import React, { useState, useEffect, useRef } from 'react'\r\n\r\n// Interface\r\nimport IDeviceForm, { IDevice } from './IDeviceForm';\r\n\r\n//Style\r\nimport styles from './DeviceForm.module.scss'\r\n\r\nimport { Dialog } from '../..';\r\nimport { Button, TextField } from '@mui/material'; \r\nimport Alert from '@mui/material/Alert';\r\nimport Autocomplete from '@mui/material/Autocomplete';\r\nimport { getMembersList, IMemberResponseFlp } from '../../../../services/memberServiceFlp';\r\nimport { useTranslation } from 'react-i18next'; \r\n \r\n\r\ninterface AutoCompleteOption {\r\n id: string;\r\n label: string;\r\n};\r\n\r\nconst DeviceForm: React.FC = ({\r\n device,\r\n onChange,\r\n open,\r\n setOpen,\r\n saveRequest,\r\n errorMessage\r\n}) => {\r\n\r\n //const translation\r\n const {t} = useTranslation();\r\n \r\n const [members, setMembers] = useState([])\r\n\r\n const [localDevice, setDevice] = useState(device)\r\n const [isChange, setIsChange] = useState(false);\r\n\r\n // get members list and set it to the drop down\r\n React.useEffect(() => {\r\n getMembersList().then((response: IMemberResponseFlp[]) => {\r\n setMembers(response.map((m:IMemberResponseFlp) => {\r\n return {id: m.recordId, label: m.name } as AutoCompleteOption\r\n }));\r\n });\r\n }, []);\r\n\r\n function usePrevious(value: any) {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current ? ref.current : \"\";\r\n }\r\n\r\n const prevMemberId = usePrevious(device.memberId);\r\n useEffect(() => {\r\n if(prevMemberId !== localDevice.memberId) {\r\n setIsChange(true);\r\n }\r\n }, [device.memberId])\r\n\r\n\r\n const handleOnChange = (newDevice: IDevice) => {\r\n setDevice(newDevice)\r\n onChange(newDevice)\r\n }\r\n\r\n // Retrieve the member info: useful to find the corresponding recordId of a given member name\r\n const memberInfo = members.find((it:AutoCompleteOption)=> device.memberId === it.id);\r\n\r\n return(\r\n setOpen(false)} title={t('Edit Device')} open={open}>\r\n <>\r\n { errorMessage && {errorMessage} }\r\n \r\n {\r\n
\r\n \r\n
\r\n }\r\n option.label}\r\n value= {{id: memberInfo?.id, label: memberInfo?.label} as AutoCompleteOption}\r\n onChange={(\r\n event: any,\r\n updateValue: AutoCompleteOption|null,\r\n reason: any,\r\n details: any\r\n ) => handleOnChange({\r\n ...device,\r\n memberId: updateValue ? updateValue.id : \"\"\r\n })}\r\n renderInput={(params) => }\r\n />\r\n
\r\n {\r\n setOpen(false)\r\n setIsChange(false)\r\n }}\r\n variant=\"outlined\"\r\n className=\"btn-confirm\"\r\n >{t('Cancel')}\r\n {\r\n saveRequest()\r\n setIsChange(false)\r\n }}\r\n variant=\"outlined\"\r\n className=\"btn-confirm\"\r\n >{t('Update')}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default DeviceForm","import DeviceForm from \"./DeviceForm\";\r\n\r\nexport default DeviceForm","import React, { useState, useEffect } from 'react'\r\n\r\n// Interface\r\nimport IPracticeForm, { IPractice } from './IPracticeForm';\r\nimport { IAddress } from '../../Molecules/AddressField/IAddressField';\r\n\r\n//Style\r\nimport styles from './PracticeForm.module.scss'\r\n\r\nimport { InputForm, AddressField, Dialog } from '../..';\r\nimport { Button } from '@mui/material';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Alert from '@mui/material/Alert';\r\n\r\nconst PracticeForm: React.FC = ({\r\n practice,\r\n onChange,\r\n open,\r\n setOpen,\r\n saveRequest,\r\n errorMessage\r\n}) => {\r\n\r\n //const translation\r\n const {t} = useTranslation()\r\n \r\n const [practiceLocal, setPractice] = useState(practice)\r\n const [validate, setValidate] = useState(false)\r\n\r\n useEffect(() => {\r\n practiceLocal.name !== '' &&\r\n practiceLocal.address.line1 !== '' &&\r\n practiceLocal.address.city !== '' &&\r\n practiceLocal.address.zip !== '' &&\r\n practiceLocal.address.country !== '' &&\r\n validateEmail(practiceLocal.email) ? setValidate(false) : setValidate(true)\r\n }, [practiceLocal])\r\n\r\n const validateEmail = (email: string) => {\r\n return String(email)\r\n .toLowerCase()\r\n .match(\r\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\r\n );\r\n };\r\n\r\n const handleOnChange = (newPractice: IPractice) => {\r\n setPractice(newPractice)\r\n onChange(newPractice)\r\n }\r\n\r\n return(\r\n setOpen(false)} title={t('Add Practices')} open={open}>\r\n <>\r\n { errorMessage && {errorMessage} }\r\n \r\n handleOnChange({\r\n ...practice,\r\n name: newValue\r\n })}\r\n />\r\n handleOnChange({\r\n ...practice,\r\n email: newValue\r\n })}\r\n />\r\n handleOnChange({\r\n ...practice,\r\n address: newValue\r\n })}\r\n />\r\n
\r\n setOpen(false)}\r\n variant=\"outlined\"\r\n className=\"btn-confirm\"\r\n >{t('Cancel')}\r\n {\r\n saveRequest()\r\n }}\r\n variant=\"outlined\"\r\n className=\"btn-confirm\"\r\n >{t('Save')}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default PracticeForm","import PracticeForm from \"./PracticeForm\";\r\n\r\nexport default PracticeForm","import { getCode, getName } from \"country-list\";\r\nimport i18next from \"i18next\";\r\nimport http from \"./api/http\";\r\nimport getLoadedConfig from \"./appConfigService\";\r\nimport { IExchangeLabAddressModel, IExchangeLabModel } from \"./labExchangeModel\";\r\n\r\n\r\nexport const FormatAddress = (address: IExchangeLabAddressModel) => {\r\n if (address) {\r\n return `${address.line1 && `${address.line1}, `}${address.line2 && `${address.line2}, `}${address.line3 && `${address.line3}, `}${address.city && `${address.city}, `}${address.postCode && `${address.postCode}, `}${address.region && `${address.region}, `}${address.countryCode && `${getName(address.countryCode)}`}`;\r\n }\r\n return \"\";\r\n};\r\n\r\nexport interface IExchangeLabList {\r\n value: IExchangeLabModel[];\r\n}\r\n\r\nexport const getExchangeLabsForMemberAsync = async (\r\n userId: string,\r\n start?: number,\r\n numberOfLab?: number,\r\n searchValue?: string\r\n): Promise => {\r\n \r\n // Ask for for lab exchange contrainst the partnerType must be equel to 'Exchange'\r\n // The email address cannot be null\r\n let query = `Partners/GetPartnersForUser(userId=${userId})?$count=true`\r\n\r\n if(numberOfLab)\r\n query += `&$top=${numberOfLab}`;\r\n\r\n if(start)\r\n query += `&$skip=${start}`; \r\n\r\n query += \"&$expand=address&$filter= recordStatus eq 'Active' and emailAddress ne null and partnerType eq 'Exchange'\";\r\n\r\n if (searchValue) {\r\n // Search only on country field \r\n var countryCode = getCode(searchValue);\r\n countryCode = countryCode?.toLowerCase();\r\n if (countryCode)\r\n query += `and contains(tolower(address/countryCode),'${countryCode}')`\r\n else {\r\n searchValue = searchValue.toLowerCase();\r\n query += `and contains(tolower(EmailAddress),'${searchValue}') or contains(tolower(Name),'${searchValue}')\r\n or contains(tolower(address/line1),'${searchValue}') or contains(tolower(address/line2),'${searchValue}')\r\n or contains(tolower(address/line3),'${searchValue}') or contains(tolower(address/city),'${searchValue}')\r\n or contains(tolower(address/region),'${searchValue}') or contains(tolower(address/postCode),'${searchValue}')`;\r\n }\r\n }\r\n\r\n const url = getLoadedConfig().oDataUrl + query;\r\n \r\n const req = await http.get(url);\r\n\r\n return req.data;\r\n};\r\n\r\n// Retrieve all partner for a member\r\nexport const getAllExchangeLabsForMemberAsync = async (\r\n userId: string,\r\n): Promise => {\r\n \r\n const res:any = await getExchangeLabsForMemberAsync (userId);\r\n if(res)\r\n {\r\n // Retrieve all the other lab exchange\r\n // Take the number of lab return in value tab for numberOfLab\r\n const count:number = res['@odata.count'];\r\n const countReal:number = res.value.length;\r\n if(count>countReal)\r\n {\r\n let promises: Promise[] = [];\r\n const step = countReal;\r\n for(let i=step; i{\r\n for(const result of results){\r\n res.value.push(...result.value);\r\n }\r\n\r\n }));\r\n }\r\n }\r\n return res;\r\n};\r\n\r\n\r\nexport const getMemberId = async (\r\n userId: string,\r\n): Promise => {\r\n\r\n const config = getLoadedConfig();\r\n let memberId = null;\r\n\r\n const queryMemberId = `Members?$filter=userId eq ${userId}&$select=recordId`;\r\n const req = await http.get(config.oDataUrl + queryMemberId);\r\n memberId = req.data?.value[0]?.recordId;\r\n\r\n return memberId;\r\n}\r\n\r\nexport const unassignLabsAsync = async (\r\n memberId:string,\r\n nameLabId:string,\r\n): Promise => {\r\n\r\n const config = getLoadedConfig();\r\n\r\n let req = null;\r\n {\r\n const queryAssign = \"Members/UnassignMemberPartners\";\r\n\r\n interface IUnAssignPartner {\r\n memberId: string;\r\n partnersIds: string[];\r\n };\r\n \r\n const data:IUnAssignPartner = {\r\n memberId: memberId,\r\n partnersIds: [\r\n nameLabId\r\n ],\r\n };\r\n\r\n let aq = config.apiUrl + queryAssign;\r\n\r\n req = await http.post(aq,data);\r\n }\r\n\r\n return (req.status===204);\r\n};\r\n\r\nexport const assignLabsAsync = async (\r\n userId:string,\r\n emailAdress:string\r\n): Promise => {\r\n\r\n const config = getLoadedConfig();\r\n\r\n const _memberId = await getMemberId(userId);\r\n if(!_memberId)\r\n return null;\r\n\r\n let labId = null;\r\n let reqPartner = null;\r\n {\r\n const queryPartnerId = `Partners?&$filter= recordStatus eq 'Active' and EmailAddress eq '${emailAdress}'and partnerType eq 'Exchange'&$expand=address`;\r\n reqPartner = await http.get(config.oDataUrl + queryPartnerId);\r\n labId = reqPartner?.data?.value[0]?.recordId;\r\n if(!labId)\r\n return Promise.reject(\"Cannot retrieve laboratory exchange Id\");\r\n }\r\n\r\n {\r\n const queryAssign = \"Members/AssignMemberPartners\";\r\n\r\n interface IAssignPartner {\r\n memberId: string;\r\n partnersIds: string[];\r\n };\r\n \r\n const data:IAssignPartner = {\r\n memberId: _memberId,\r\n partnersIds: [\r\n labId,\r\n ],\r\n };\r\n\r\n const req = await http.post(config.apiUrl + queryAssign,data);\r\n if(200 !== req.status)\r\n return Promise.reject(\"Cannot assign laboratory\");\r\n }\r\n\r\n return reqPartner.data;\r\n};\r\n\r\nexport const getExchangeLabsFilteredAsync = async (\r\n emailSearch?:string,\r\n nameSearch?:string\r\n): Promise => {\r\n const config = getLoadedConfig();\r\n\r\n // Ask for for lab exchange contrainst the partnerType must be equel to 'Exchange'\r\n // The email address cannot be null\r\n let query = `Partners?$count=true&$expand=address&$orderby=recordCreated desc`;\r\n query += \"&$filter= recordStatus eq 'Active' and emailAddress ne null and partnerType eq 'Exchange'\";\r\n\r\n if(emailSearch && (emailSearch!==\"\") )\r\n query += `and contains(emailAddress, '${emailSearch}')`;\r\n\r\n if(nameSearch && (nameSearch!==\"\") )\r\n query += `and contains(name, '${nameSearch}')`; \r\n\r\n const url = config.oDataUrl + query;\r\n console.log(\"url\", url);\r\n const req = await http.get(url);\r\n\r\n return req.data;\r\n};\r\n\r\nexport const getExchangeLabsAsync = async (\r\n start: number,\r\n numberOfLab: number,\r\n searchValue: string\r\n): Promise => {\r\n const config = getLoadedConfig();\r\n\r\n // Ask for for lab exchange contrainst the partnerType must be equel to 'Exchange'\r\n // The email address cannot be null\r\n let query = `Partners?$count=true&$top=${numberOfLab}&$skip=${start}&$expand=address&$orderby=recordCreated desc\r\n &$filter= recordStatus eq 'Active' and emailAddress ne null and partnerType eq 'Exchange'`;\r\n\r\n if (searchValue) {\r\n // Search only on country field \r\n var countryCode = getCode(searchValue);\r\n countryCode = countryCode?.toLowerCase();\r\n if (countryCode)\r\n query += `and contains(tolower(address/countryCode),'${countryCode}')`\r\n else {\r\n searchValue = searchValue.toLowerCase();\r\n query += `and contains(tolower(EmailAddress),'${searchValue}') or contains(tolower(Name),'${searchValue}')\r\n or contains(tolower(address/line1),'${searchValue}') or contains(tolower(address/line2),'${searchValue}')\r\n or contains(tolower(address/line3),'${searchValue}') or contains(tolower(address/city),'${searchValue}')\r\n or contains(tolower(address/region),'${searchValue}') or contains(tolower(address/postCode),'${searchValue}')`;\r\n }\r\n }\r\n const url = config.oDataUrl + query;\r\n const req = await http.get(url);\r\n\r\n return req.data;\r\n};\r\n\r\nexport const addExchangeLabAsyncFlp = async (\r\n data: IExchangeLabModel\r\n): Promise => {\r\n\r\n const lang = i18next.resolvedLanguage;\r\n const req = await http.post(\r\n getLoadedConfig().oDataUrl + \"Partners?$expand=address\",\r\n {\r\n name: data.emailAddress,\r\n emailAddress: data.emailAddress,\r\n partnerType: data.partnerType,\r\n enable: data.enable,\r\n ...(data.address ? {\r\n address: {\r\n line1: data.address.line1,\r\n line2: data.address.line2,\r\n line3: data.address.line3,\r\n city: data.address.city,\r\n region: data.address.region,\r\n postCode: data.address.postCode,\r\n countryCode: data.address.countryCode,\r\n } \r\n }: {} ),\r\n },\r\n {\r\n headers: {\r\n 'Accept-Language': lang\r\n }\r\n }\r\n );\r\n\r\n return req.data.value[0];\r\n};\r\n\r\nexport const getLabCountAsync = async (): Promise => {\r\n const config = getLoadedConfig();\r\n let query = \"Partners/$count\";\r\n\r\n const url = config.oDataUrl + query;\r\n const req = await http.get(url);\r\n\r\n return req.data;\r\n};\r\n","import { IRootStoreState } from '../../reducer'\r\n\r\nexport const selectUser = (state: IRootStoreState) => state.user","import { IRootStoreState } from '../../reducer'\r\n\r\nimport { createSelector } from 'reselect'\r\n\r\nexport const pendingListExchangeLab = (state: IRootStoreState) => state.exchangeLab.listExchangeLabs.pending\r\nconst selectListExchangeLab = (state: IRootStoreState) => state.exchangeLab.listExchangeLabs.data\r\nconst selectExchangeLab = (state: IRootStoreState) => state.exchangeLab.exchangeLabs\r\nconst selectAddress = (state: IRootStoreState) => state.address.address\r\n\r\nexport const selectListExhangeLab = createSelector(\r\n selectListExchangeLab,\r\n selectExchangeLab,\r\n selectAddress,\r\n (listPractices, echangeLab, address) => listPractices.map((item) => ({\r\n emailAddress: echangeLab[item].emailAddress,\r\n name: echangeLab[item].name,\r\n address: {\r\n line1: address[echangeLab[item].addressId].line1,\r\n city: address[echangeLab[item].addressId].city,\r\n region: address[echangeLab[item].addressId].region,\r\n zip: address[echangeLab[item].addressId].postCode,\r\n country: address[echangeLab[item].addressId].countryCode,\r\n }\r\n }))\r\n)","import React, { useState, useEffect } from \"react\";\r\nimport { useSelector } from 'react-redux';\r\nimport css from \"./ExchangeLabForm.module.scss\";\r\nimport { TextField, Button } from \"@mui/material\";\r\nimport {\r\n getExchangeLabsFilteredAsync, \r\n getAllExchangeLabsForMemberAsync\r\n} from \"../../../../services/labExchangeService\";\r\nimport isEmail from \"validator/lib/isEmail\";\r\nimport { UserRole } from \"../../../../shared/enums/UserRole\";\r\nimport { Alert, Autocomplete } from \"@mui/material\";\r\nimport { CircularProgress } from \"@mui/material\";\r\nimport { IExchangeLabModel } from \"../../../../services/labExchangeModel\";\r\nimport { AddressField } from \"../..\";\r\nimport { IAddress } from \"../../Molecules/AddressField/IAddressField\";\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { selectUser } from '../../../../redux/selector/user';\r\nimport { selectListExhangeLab } from '../../../../redux/selector/exchangeLab';\r\n\r\nconst ExchangeLabForm = (props: {\r\n add?: (data: any) => void;\r\n errorMessage?: string;\r\n loading?:boolean;\r\n closeDialog: () => void;\r\n}) => {\r\n const { add, closeDialog, errorMessage,loading } = props;\r\n const [labName, setLabName] = useState(\"\");\r\n const [emailAddress, setEmailAddress] = useState(\"\");\r\n const [labNames, setLabNames] = useState([]); \r\n const [labEmails, setLabEmails] = useState([]);\r\n const [exchangeLabsForMember, setExchangeLabsForMember] = useState();\r\n const [exchangeLabs, setExchangeLabs] = useState();\r\n const [addressSource, setAddressSource] = useState();\r\n const [loadingOtpion, setLoadingOtpion] = useState(false);\r\n const [lock, setLock] = useState('')\r\n\r\n // 0 = initialisation\r\n // 1 = edit new laboratory by email\r\n // 2 = search by name laboratory\r\n // 3 = select laboratory by email or name\r\n const [state, setState] = useState(0)\r\n\r\n const {t} = useTranslation()\r\n\r\n const [address, setAddress] = useState({\r\n line1: '',\r\n city: '',\r\n zip: '',\r\n country: '',\r\n region: '',\r\n })\r\n \r\n const user = useSelector(selectUser)\r\n const exchangeLabsTest = useSelector(selectListExhangeLab)\r\n // const loadingOptpionAll = useSelector(pendingListExchangeLab)\r\n \r\n useEffect(() => {\r\n\r\n if( (user.ID !== \"\") && (user.role === UserRole.MEMBER_MANAGER) ) {\r\n setLoadingOtpion(true);\r\n getAllExchangeLabsForMemberAsync(user.ID).then( (labs:any) => {\r\n setExchangeLabsForMember(labs.value);\r\n }).finally(()=>{\r\n setLoadingOtpion(false);\r\n });\r\n }\r\n\r\n }, []);\r\n\r\n\r\n useEffect(() => {\r\n setLoadingOtpion(true);\r\n getExchangeLabsFilteredAsync().then((allPartners) => {\r\n\r\n // Filter allPartners by alReadyAssignedPartners for member\r\n let filteredPartners;\r\n if (exchangeLabsForMember !== undefined) {\r\n filteredPartners = allPartners.value?.filter((allPartner) =>\r\n !exchangeLabsForMember?.find(\r\n (assignPartner) => assignPartner.recordId === allPartner.recordId\r\n ));\r\n }\r\n //else we retrieve all the partners for the admin\r\n else\r\n filteredPartners = allPartners.value;\r\n\r\n setExchangeLabs(filteredPartners);\r\n\r\n // Sort lab name and email for better display\r\n setLabNames(filteredPartners?.map((option:IExchangeLabModel) => option?.name ));\r\n setLabEmails(filteredPartners?.map((option:IExchangeLabModel) => option?.emailAddress ));\r\n\r\n }).finally(()=>{\r\n setLoadingOtpion(false);\r\n });\r\n \r\n }, [exchangeLabsForMember]);\r\n\r\n useEffect(() => {\r\n if(undefined === exchangeLabs || emailAddress === \"\")\r\n return;\r\n\r\n const labModel = exchangeLabs.find((it: any)=> emailAddress.toUpperCase() === it.emailAddress.toUpperCase() );\r\n if(labModel)\r\n {\r\n setLabName(labModel.name);\r\n // Lab can have been declared by cs connect without adress\r\n setAddressSource({\r\n line1: labModel?.address?.line1 ?? '',\r\n city: labModel?.address?.city ?? '',\r\n region: labModel?.address?.region ?? '',\r\n zip: labModel?.address?.postCode ?? '',\r\n country: labModel?.address?.countryCode ?? ''\r\n });\r\n }\r\n else {\r\n setAddressSource( (prevAddressSource: any) => {\r\n if (prevAddressSource) {\r\n clearAddress();\r\n setLabName('');\r\n }\r\n return undefined;\r\n });\r\n }\r\n\r\n },[exchangeLabs, emailAddress]);\r\n\r\n useEffect(() => {\r\n if(undefined === exchangeLabs || labName === \"\")\r\n return;\r\n\r\n const labModel = exchangeLabs.find((it: any)=> labName.toUpperCase() === it.name.toUpperCase() );\r\n if(labModel)\r\n {\r\n setEmailAddress(labModel.emailAddress);\r\n // Lab can have been declared by cs connect without adress\r\n setAddressSource({\r\n line1: labModel?.address?.line1 ?? '',\r\n city: labModel?.address?.city ?? '',\r\n region: labModel?.address?.region ?? '',\r\n zip: labModel?.address?.postCode ?? '',\r\n country: labModel?.address?.countryCode ?? ''\r\n });\r\n } else {\r\n setAddressSource( (prevAddressSource: any) => {\r\n if (prevAddressSource) clearAddress();\r\n return undefined;\r\n });\r\n }\r\n\r\n },[exchangeLabs, labName]);\r\n\r\n useEffect(() => {\r\n if(addressSource) {\r\n setAddress({\r\n line1: addressSource.line1 ?? '',\r\n city: addressSource.city ?? '',\r\n zip: addressSource.zip ?? '',\r\n country: addressSource.country ?? '',\r\n region: addressSource.region ?? '',\r\n })\r\n }\r\n\r\n },[addressSource]);\r\n\r\n const Validated = ():boolean => {\r\n let validate:boolean = isEmail(emailAddress);\r\n\r\n if(validate && !addressSource) {\r\n validate = validate && address.line1 !== \"\" && address.city !== \"\" && address.zip !== \"\" && address.country !== \"\";\r\n }\r\n return validate;\r\n };\r\n\r\n const clearAddress = () => {\r\n setAddress({\r\n line1: '',\r\n city: '',\r\n zip: '',\r\n country: '',\r\n region: '',\r\n })\r\n };\r\n\r\n const Submit = (e: any) => {\r\n e.preventDefault()\r\n\r\n const data:IExchangeLabModel = {\r\n recordId: \"\",\r\n name: labName,\r\n emailAddress: emailAddress,\r\n partnerType: \"Exchange\",\r\n enable: true,\r\n address : {\r\n recordId: \"\",\r\n line1: address.line1,\r\n line2: '',\r\n line3: '',\r\n city: address.city,\r\n region: address.region,\r\n postCode: address.zip,\r\n countryCode: address.country,\r\n }\r\n };\r\n add?.(data);\r\n }\r\n\r\n const resetField = () => {\r\n setEmailAddress('');\r\n setLabName('');\r\n setAddressSource(null);\r\n clearAddress();\r\n setState(0);\r\n }\r\n \r\n return (\r\n
\r\n {errorMessage && (\r\n \r\n {errorMessage}\r\n \r\n )} \r\n \r\n {\r\n ( {\r\n setEmailAddress(v)\r\n setState(1)\r\n if(!v) resetField()\r\n }}\r\n onInputChange={(e,v:string) => {\r\n setEmailAddress(v)\r\n setState(1)\r\n if(!v) resetField()\r\n }}\r\n options={labEmails}\r\n getOptionSelected={ (option: string, value: string) => option === value }\r\n loading={loadingOtpion}\r\n disabled={state === 2}\r\n style={{margin: 0}}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />)} \r\n \r\n {\r\n ( {\r\n setLabName(v)\r\n setState(2)\r\n if(!v) resetField()\r\n }}\r\n onInputChange={(e,v:string) => {\r\n setLabName(v)\r\n setState(2)\r\n if(!v) resetField()\r\n }} \r\n getOptionSelected={ (option: string, value: string) => option === value }\r\n options={labNames}\r\n inputValue={labName}\r\n fullWidth\r\n loading={loadingOtpion}\r\n disabled={state === 1 || user.role === UserRole.FLP_ADMINISTRATOR}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />)} \r\n {setAddress(newValue)}}\r\n disabled={state === 2 || Boolean(addressSource)}\r\n />\r\n
\r\n \r\n {t('Cancel')}\r\n \r\n \r\n {loading && (\r\n \r\n )}\r\n {!loading && <>{t('Add')}}\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ExchangeLabForm","import ExchangeLabForm from \"./ExchangeLabForm\";\r\n\r\nexport default ExchangeLabForm","import React from \"react\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport {\r\n Button,\r\n LinearProgress,\r\n IconButton,\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n} from \"@mui/material\";\r\nimport useDialogState from \"../../../shared/useDialogState\";\r\nimport AddEditMemberDialog from \"../../Dialogs/AddEditMemberDialog\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport { DialogType } from \"../../../shared/enums/DialogType\";\r\nimport Dialogs from \"../../Dialogs\";\r\nimport {\r\n getMembersFlpAsync,\r\n IMemberResponseFlp,\r\n} from \"../../../services/memberServiceFlp\";\r\nimport ConfirmDeleteDialog from \"../../Dialogs/ConfirmDeleteDialog\";\r\nimport { Pagination } from \"@mui/material\";\r\nimport { SearchBar } from \"../../../components/shared\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport classes from './Members.module.scss'\r\nimport useAuthService from \"../../../services/authService\";\r\n \r\n\r\ninterface IProps {\r\n type: string;\r\n}\r\n\r\nexport default function Members(props: IProps) {\r\n const { type } = props;\r\n const memberPerPage = 10; \r\n const {t} = useTranslation();\r\n const authService = useAuthService();\r\n\r\n const [isOpen, open, close] = useDialogState();\r\n const [dialogType, setDialogType] = React.useState(\"\");\r\n const [dialogContent, setDialogContent] = React.useState(<>);\r\n const [dialogTitle, setDialogTitle] = React.useState(\"\");\r\n const [selectedIndex, setSelectedIndex] = React.useState(0);\r\n const [editRowIndex, setEditRowIndex] = React.useState(-1);\r\n const [isLoading, setLoading] = React.useState(false);\r\n const [rowsData, setRowsData] = React.useState([]);\r\n const [memberCount, setMemberCount] = React.useState(0);\r\n const [currentPage, setCurrentPage] = React.useState(0);\r\n const [validated, setValidated] = React.useState(false);\r\n const [searchValue, setSearchValue] = React.useState(\"\");\r\n const [userId, setUserId] = React.useState(\"\");\r\n\r\n const handleDialogClose = (\r\n isOpen: boolean,\r\n cancelled: boolean,\r\n data: IMemberResponseFlp\r\n ) => {\r\n if (!cancelled) {\r\n if (\r\n dialogType === DialogType.ADD_MEMBER ||\r\n dialogType === DialogType.EDIT_MEMBER\r\n ) {\r\n if (data) {\r\n if (-1 === editRowIndex) {\r\n if (rowsData.length >= memberPerPage) rowsData.splice(-1);\r\n setMemberCount(memberCount + 1);\r\n rowsData.unshift(data);\r\n } else if (dialogType === DialogType.EDIT_MEMBER) {\r\n rowsData[editRowIndex] = data;\r\n }\r\n }\r\n }\r\n\r\n // Remove row from data\r\n if (dialogType === DialogType.CONFIRM_DELETE) {\r\n if (rowsData.length === memberPerPage && memberCount > memberPerPage) handleChange(null, currentPage, true);\r\n if (rowsData.length === 1 && memberCount > memberPerPage) handleChange(null, 1, true);\r\n setMemberCount(memberCount - 1);\r\n rowsData.splice(editRowIndex, 1);\r\n }\r\n }\r\n\r\n if (\r\n dialogType === DialogType.ADD_MEMBER ||\r\n dialogType === DialogType.EDIT_MEMBER\r\n ) {\r\n setValidated?.(false);\r\n }\r\n close();\r\n };\r\n\r\n const handleChange = (event: any, value: number, refresh: boolean = false, cancel: boolean = false) => {\r\n if (value !== currentPage || refresh || cancel) {\r\n setLoading(false);\r\n setCurrentPage(value);\r\n getMembersFlpAsync(\r\n false,\r\n (value - 1) * memberPerPage,\r\n memberPerPage,\r\n cancel ? \"\" : searchValue\r\n ).then((response: any) => {\r\n setMemberCount(response[\"@odata.count\"]);\r\n setRowsData(response?.value);\r\n setLoading(true);\r\n });\r\n setLoading(false);\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n handleChange(null, 1, true)\r\n },[searchValue]);\r\n\r\n React.useEffect(() => {\r\n authService.getUserId().then(result => {\r\n setUserId(result);\r\n });\r\n handleChange(null, 1);\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n { setSearchValue(\"\") } }\r\n onRequestSearch={(value: string) => { setSearchValue(value)}}\r\n tooltipText={t('MembersNameFirstNameSurnameEmail') ?? ''}\r\n buttonLabel={`${t('Search')}`} \r\n placeholder={t('MembersNameFirstNameSurnameEmail')} >\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

{`${memberCount} result${\r\n memberCount > 1 ? \"s\" : \"\"\r\n }`}

\r\n
\r\n {isOpen && (\r\n \r\n )}\r\n {\r\n \r\n \r\n \r\n \r\n {t('No')}\r\n {t('MemberName')}\r\n {t('FirstName')}\r\n {t('Surname')}\r\n {t('Email')}\r\n \r\n {t('Actions')}\r\n \r\n \r\n \r\n \r\n {rowsData.map((row: IMemberResponseFlp, index: number) => (\r\n \r\n \r\n {currentPage && (\r\n <>\r\n {(currentPage - 1) *\r\n (memberPerPage ? memberPerPage : 0) +\r\n index +\r\n 1}\r\n \r\n )}\r\n \r\n {row.name}\r\n \r\n {row?.user?.firstName || \"\"}\r\n \r\n {row?.user?.surname || \"\"}\r\n \r\n {row?.user?.emailAddress || \"\"}\r\n \r\n \r\n {row.userId !== userId && (\r\n <>\r\n {\r\n setSelectedIndex(index);\r\n setDialogType(DialogType.EDIT_MEMBER);\r\n setDialogTitle(\"Edit Fleet Manager\");\r\n setDialogContent(\r\n \r\n );\r\n setEditRowIndex(index);\r\n open();\r\n }}\r\n >\r\n \r\n \r\n {\r\n setSelectedIndex(index);\r\n setDialogType(DialogType.CONFIRM_DELETE);\r\n setDialogTitle(\"\");\r\n setEditRowIndex(index);\r\n setDialogContent();\r\n open();\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n }\r\n {/* loader */}\r\n {!isLoading && }\r\n {memberCount > 0 && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\n","import Dialog from \"@mui/material/Dialog\";\r\nimport DialogContent from \"@mui/material/DialogContent\";\r\nimport DialogTitle from \"@mui/material/DialogTitle\";\r\nimport css from \"./CustomizedDialog.module.scss\";\r\nimport { Box } from '@mui/material';\r\n\r\ninterface IDialogProps {\r\n title: string;\r\n children: any;\r\n openDialog: boolean;\r\n setOpenDialog: (openDialog: boolean) => void;\r\n}\r\n\r\nexport default function CustomizedDialog(props: IDialogProps) {\r\n const { title, children, openDialog } = props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n
\r\n )\r\n}\r\n","import React from 'react';\n\ninterface IAlertContext {\n alertMessage: string;\n setAlertMessage: React.Dispatch>; \n alertSeverity: string;\n setAlertSeverity: React.Dispatch>;\n isOpenAlert: boolean;\n setOpenAlert: React.Dispatch>; \n isButtonDisabled: boolean;\n setButtonDisabled: React.Dispatch>; \n alertErrorMessage: string;\n setAlertErrorMessage: React.Dispatch>;\n } \ninterface IChildrenType{\n children : React.ReactNode;\n}\n\nexport const AlertContext = React.createContext(null);\n\nexport const AlertContextProvider = ({ children } : IChildrenType ) => {\n const [alertMessage, setAlertMessage] = React.useState(\"\");\n const [alertErrorMessage, setAlertErrorMessage] = React.useState(\"\");\n const [alertSeverity, setAlertSeverity] = React.useState(\"\");\n const [isOpenAlert, setOpenAlert] = React.useState(false);\n const [isButtonDisabled, setButtonDisabled] = React.useState(false); \n \n const memorizedAlertContextValue = React.useMemo(\n () => ({\n alertMessage, \n setAlertMessage,\n alertErrorMessage, \n setAlertErrorMessage,\n alertSeverity,\n setAlertSeverity,\n isOpenAlert,\n setOpenAlert,\n isButtonDisabled,\n setButtonDisabled \n }),\n [alertMessage, setAlertMessage, alertSeverity, setAlertSeverity,isOpenAlert , setOpenAlert, isButtonDisabled, setButtonDisabled, alertErrorMessage, setAlertErrorMessage]\n );\n\n return (\n \n {children}\n \n );\n}; \n\nexport const useAlertContext = () => {\n const alertContext = React.useContext(AlertContext);\n\n if(!alertContext) throw new Error('The context must be used inside the provider ');\n\n return alertContext;\n}\n ","import React from \"react\";\r\nimport {\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n Button,\r\n LinearProgress,\r\n IconButton,\r\n Tooltip\r\n} from \"@mui/material\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\n\r\nimport CustomizedDialog from \"../../Dialogs/CustomizedDialog\";\r\nimport {\r\n addExchangeLabAsyncFlp,\r\n assignLabsAsync,\r\n FormatAddress,\r\n getExchangeLabsAsync,\r\n getExchangeLabsFilteredAsync,\r\n getExchangeLabsForMemberAsync,\r\n getMemberId,\r\n IExchangeLabList,\r\n unassignLabsAsync,\r\n} from \"../../../services/labExchangeService\";\r\nimport { ExchangeLabForm } from \"../../shared/Organisms\";\r\nimport { Pagination } from \"@mui/material\";\r\nimport { UserRole } from \"../../../shared/enums/UserRole\";\r\nimport useAuthService from \"../../../services/authService\";\r\nimport ConfirmDeleteDialog from \"../../Dialogs/ConfirmDeleteDialog\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\nimport { IExchangeLabModel } from \"../../../services/labExchangeModel\";\r\nimport { SearchBar } from \"../../../components/shared\";\r\nimport { useTranslation } from 'react-i18next'; \r\nimport { Alert, Color } from \"@mui/material\"; \r\nimport {useAlertContext} from \"../../Context/AlertContext\";\r\nimport classes from './ExchangeLabConf.module.scss'\r\n\r\n\r\ninterface IProps {\r\n type: string;\r\n}\r\n\r\nexport default function ExchangeLabList(props: IProps) {\r\n const labPerPage = 10;\r\n const { type } = props;\r\n const [labRows, setLabRows] = React.useState([]);\r\n const [currentPage, setCurrentPage] = React.useState(0);\r\n const [isLabLoading, setLabLoading] = React.useState(false);\r\n const [labCount, setLabCount] = React.useState(0);\r\n const [userRole, setUserRole] = React.useState(UserRole.NOT_SET);\r\n const [userId, setUserId] = React.useState(\"\");\r\n const [memberId, setMemberId] = React.useState(\"\");\r\n const [isLoading, setLoading] = React.useState(false);\r\n const [openDialog, setOpenDialog] = React.useState(false);\r\n const [title, setTitle] = React.useState(\"\"); \r\n const [isAddExLabLoading, setAddExLabLoading] = React.useState(false);\r\n const [searchValue, setSearchValue] = React.useState(\"\"); \r\n \r\n const alertContext = useAlertContext(); \r\n\r\n const [editRowData, setEditRowData] = React.useState();\r\n const [editRowIndex, setEditRowIndex] = React.useState(-1);\r\n \r\n const {t} = useTranslation();\r\n const authService = useAuthService();\r\n\r\n React.useEffect(() => {\r\n authService.getUserRole().then((aRole: any) => {\r\n setUserRole(aRole as UserRole);\r\n });\r\n }, [authService]);\r\n\r\n // Fetch current user id\r\n React.useEffect(() => {\r\n if (UserRole.NOT_SET !== userRole) {\r\n authService.getUserId().then(result => {\r\n setUserId(result);\r\n });\r\n }\r\n }, [authService, userRole]);\r\n\r\n\r\n const handleAdd = async (\r\n data: IExchangeLabModel\r\n ) => {\r\n // Remove row from data\r\n try {\r\n\r\n setAddExLabLoading(true);\r\n\r\n if (data) {\r\n closeDialogBackGroundWork('info', t(\"AddLabProgress\", {lab:data.emailAddress}), true, false); \r\n alertContext.setAlertErrorMessage(\"\");\r\n \r\n if (userRole === UserRole.FLP_ADMINISTRATOR || userRole === UserRole.FLP_SUPPORT) {\r\n \r\n const findExchangeLab = await getExchangeLabsFilteredAsync(data.emailAddress);\r\n if (findExchangeLab.value.length === 0) {\r\n try {\r\n const result = await addExchangeLabAsyncFlp(data);\r\n\r\n const lab = {\r\n recordId: result.recordId,\r\n name: result.name,\r\n emailAddress: result.emailAddress,\r\n address: result.address,\r\n actions: \"\",\r\n };\r\n\r\n if (labRows.length >= labPerPage) labRows.splice(-1);\r\n setLabCount(labCount + 1);\r\n labRows.unshift(lab);\r\n }\r\n catch (error: any) {\r\n throw new Error(t(\"CannotAddExchangeLab\", {lab:data.emailAddress}))\r\n }\r\n\r\n } else {\r\n throw new Error(t(\"LabAlreadyAdded\", {lab:data.emailAddress}))\r\n }\r\n \r\n } else if (userRole === UserRole.MEMBER_MANAGER) {\r\n let resultAssign: IExchangeLabList | null = null;\r\n\r\n const findExchangeLab = await getExchangeLabsFilteredAsync(data.emailAddress);\r\n if (findExchangeLab.value.length === 0) {\r\n\r\n let newLab = null;\r\n try {\r\n newLab = await addExchangeLabAsyncFlp(data);\r\n }\r\n catch(error:any){\r\n throw new Error(t(\"CannotAddExchangeLab\", {lab:data.emailAddress}))\r\n }\r\n\r\n if(newLab)\r\n {\r\n try {\r\n resultAssign = await assignLabsAsync(userId, newLab.emailAddress); \r\n }\r\n catch(error:any) {\r\n throw new Error(t(\"CannotAssignLab\", {lab:data.emailAddress}))\r\n }\r\n }\r\n }\r\n else {\r\n try {\r\n resultAssign = await assignLabsAsync(userId, data.emailAddress);\r\n }\r\n catch(error:any) {\r\n throw new Error(t(\"CannotAssignLab\", {lab:data.emailAddress}))\r\n }\r\n }\r\n\r\n if(resultAssign)\r\n {\r\n const lab = {\r\n recordId: resultAssign.value[0].recordId,\r\n name: resultAssign.value[0].name,\r\n emailAddress: resultAssign.value[0].emailAddress,\r\n address: resultAssign.value[0].address,\r\n actions: \"\",\r\n };\r\n \r\n if (labRows.length >= labPerPage) labRows.splice(-1);\r\n setLabCount(labCount + 1);\r\n labRows.unshift(lab);\r\n }\r\n }\r\n } \r\n }\r\n catch (error: any) { \r\n alertContext.setAlertErrorMessage(error?.message);\r\n } \r\n \r\n \r\n alertContext.setAlertErrorMessage((alertErrorMessage)=> \r\n {\r\n if(alertErrorMessage)\r\n {\r\n alertContext.setAlertMessage(alertErrorMessage);\r\n alertContext.setAlertSeverity(\"error\");\r\n } else\r\n {\r\n alertContext.setAlertMessage(t(\"AddLabsucess\", {lab:data.emailAddress}));\r\n alertContext.setAlertSeverity(\"success\"); \r\n }\r\n return alertErrorMessage;\r\n }); \r\n \r\n setAddExLabLoading(false);\r\n alertContext.setButtonDisabled(false);\r\n };\r\n\r\n const handleChange = (event: any, value: number, refresh: boolean = false, cancel: boolean = false) => {\r\n \r\n if(userId === \"\")\r\n return;\r\n\r\n if (refresh || value !== currentPage || cancel) {\r\n setLabLoading(true);\r\n setCurrentPage(value);\r\n\r\n const processResponseFLP = (response: any) => {\r\n if (undefined !== response) {\r\n setLabCount(response[\"@odata.count\"]);\r\n setLabRows(response?.value);\r\n } else setLabRows([]);\r\n setLabLoading(false);\r\n };\r\n\r\n if(userRole === UserRole.FLP_ADMINISTRATOR || userRole === UserRole.FLP_SUPPORT )\r\n {\r\n getExchangeLabsAsync((value - 1) * labPerPage, labPerPage, cancel ? '' : searchValue).then(\r\n processResponseFLP\r\n );\r\n }else if(userRole === UserRole.MEMBER_MANAGER)\r\n {\r\n getExchangeLabsForMemberAsync(userId, (value - 1) * labPerPage, labPerPage, cancel ? '' : searchValue).then(\r\n processResponseFLP\r\n );\r\n }\r\n }\r\n };\r\n\r\n const closeDialog = () => {\r\n setOpenDialog(false); \r\n alertContext.setAlertErrorMessage(\"\");\r\n setAddExLabLoading(false);\r\n };\r\n\r\n const closeDialogBackGroundWork = (severity: Color, msg: string, isAddingLabEx: boolean, isOpenModal: boolean) => {\r\n setOpenDialog(isOpenModal);\r\n alertContext.setAlertMessage(msg); \r\n alertContext.setAlertErrorMessage(\"\");\r\n alertContext.setAlertSeverity(severity);\r\n setAddExLabLoading(isAddingLabEx);\r\n alertContext.setOpenAlert(true);\r\n alertContext.setButtonDisabled(true);\r\n };\r\n\r\n const unassignedPartner = async () => {\r\n setLoading(true)\r\n try {\r\n if(memberId===\"\")\r\n throw new Error(\"Empty memberId\");\r\n\r\n if(!await unassignLabsAsync(memberId, editRowData.recordId))\r\n throw new Error(`Cannot removed partner: userId:${userId} partnerId:${editRowData.recordId}`);\r\n\r\n if (labRows.length === labPerPage && labCount > labPerPage) handleChange(null, currentPage, true);\r\n if (labRows.length === 1 && labCount > labPerPage) handleChange(null, 1, true);\r\n setLabCount(labCount - 1);\r\n handleChange(null, 1, true);\r\n labRows.splice(editRowIndex, 1);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n setLoading(false)\r\n closeDialog()\r\n };\r\n\r\n React.useEffect(() => {\r\n if(userId !== \"\" && (userRole === UserRole.MEMBER_MANAGER) ){\r\n getMemberId(userId).then((id:string)=>{\r\n setMemberId(id);\r\n });\r\n }\r\n },[userRole, userId]);\r\n\r\n React.useEffect(() => {\r\n handleChange(null, 1, true)\r\n },[searchValue]);\r\n\r\n React.useEffect(() => {\r\n handleChange(null, 1);\r\n }, [userRole, userId]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n { setSearchValue(\"\") } }\r\n onRequestSearch={(value: string) => { setSearchValue(value)}}\r\n tooltipText={t('LabNameEmailAddress') ?? ''}\r\n buttonLabel={`${t('Search')}`} \r\n placeholder={t('LabNameEmailAddress')} >\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

{`${labCount} result${\r\n labCount > 1 ? \"s\" : \"\"\r\n }`}

\r\n
\r\n \r\n {title ? ( \r\n ):\r\n (\r\n \r\n )}\r\n \r\n\r\n {alertContext.isOpenAlert && { alertContext.setOpenAlert(false) }}\r\n severity={alertContext.alertSeverity as Color}>{alertContext.alertMessage}} \r\n {\r\n \r\n \r\n \r\n \r\n {t('No')}\r\n {t('Lab_Name')}\r\n {t('Email_Address')}\r\n {t('Address')}\r\n {(userRole === UserRole.MEMBER_MANAGER)&&\r\n ({t('Actions')})}\r\n \r\n \r\n \r\n {labRows.map((row: any, index: number) => (\r\n \r\n \r\n {currentPage && (\r\n <>\r\n {(currentPage - 1) * (labPerPage ? labPerPage : 0) +\r\n index +\r\n 1}\r\n \r\n )}\r\n \r\n {row?.name}\r\n {row?.emailAddress || \"\"}\r\n \r\n {\r\n // Display postal adress of lab\r\n // Display the information that adress is not available if field is empty\r\n row&&row.address ? FormatAddress( row.address ) : t('NotAvailable')\r\n }\r\n \r\n {(userRole === UserRole.MEMBER_MANAGER)&&\r\n (\r\n {\r\n setEditRowIndex(index);\r\n setEditRowData(row);\r\n setTitle(\"\");\r\n setOpenDialog(true);\r\n } }\r\n >\r\n \r\n \r\n )} \r\n \r\n ))}\r\n \r\n
\r\n
\r\n }\r\n {isLabLoading && }\r\n {labCount > 0 && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\n","export default __webpack_public_path__ + \"static/media/advanced.ed6d9f59.svg\";","import http from \"./api/http\";\r\nimport getLoadedConfig from \"./appConfigService\";\r\n\r\nexport interface IQuickConnectPartner {\r\n name: string;\r\n trustedPartnerId: string;\r\n emailAddress: string;\r\n logo: string;\r\n partnerType: string;\r\n enable: boolean;\r\n addressId: string;\r\n indications?: string;\r\n countries?: string;\r\n recordId: string;\r\n recordStatus: string;\r\n recordCreated: string;\r\n recordLastUpdated: string;\r\n memberPartners: IMemberPartner[];\r\n\r\n}\r\nexport interface IMemberPartner {\r\n memberId: string;\r\n partnerId: string;\r\n partnerStatus: string;\r\n}\r\n\r\nexport const getQuickConnectPartners = async(start: number, itemPerPage: number): Promise => {\r\n const config = getLoadedConfig();\r\n const query = `Partners?$count=true&$top=${itemPerPage}&$skip=${start}`;\r\n const filter = `&$filter= recordStatus eq 'Active' and (partnerType eq 'Advanced' or partnerType eq 'Standard')`\r\n\r\n const url = config.oDataUrl + query + filter;\r\n const res = await http.get(url);\r\n const count = res.data[\"@odata.count\"];\r\n const resp = {\r\n count: count ? parseInt(count) : 0,\r\n value: res.data?.value as IQuickConnectPartner[]\r\n };\r\n return resp;\r\n};\r\n\r\nexport const getMemberQuickConnectPartners = async(start: number, itemPerPage: number): Promise => {\r\n const config = getLoadedConfig();\r\n const query = `Partners/GetMemberQuickPartners()?$expand=memberPartners&$count=true&$top=${itemPerPage}&$skip=${start}`;\r\n\r\n const url = config.oDataUrl + query;\r\n const res = await http.get(url);\r\n const count = res.data[\"@odata.count\"];\r\n const resp = {\r\n count: count ? parseInt(count) : 0,\r\n value: res.data?.value as IQuickConnectPartner[],\r\n };\r\n return resp;\r\n};\r\n\r\n\r\n\r\n","export default __webpack_public_path__ + \"static/media/ico-ApplianceFalse.13b3468f.svg\";","export default __webpack_public_path__ + \"static/media/ico-ApplianceTrue.058c1823.svg\";","export default __webpack_public_path__ + \"static/media/ico-DentureFalse.4aae8609.svg\";","export default __webpack_public_path__ + \"static/media/ico-DentureTrue.79a31694.svg\";","export default __webpack_public_path__ + \"static/media/ico-GuidedSurgeryFalse.302fc76d.svg\";","export default __webpack_public_path__ + \"static/media/ico-GuidedSurgeryTrue.9d597fc6.svg\";","export default __webpack_public_path__ + \"static/media/ico-OrthodonticFalse.1298e5d2.svg\";","export default __webpack_public_path__ + \"static/media/ico-OrthodonticTrue.f39f1bf3.svg\";","export default __webpack_public_path__ + \"static/media/ico-RestorativeAndImplantFalse.84a990a4.svg\";","export default __webpack_public_path__ + \"static/media/ico-RestorativeAndImplantTrue.a903ad37.svg\";","export default __webpack_public_path__ + \"static/media/ico-SleepDentistryFalse.96f05e1f.svg\";","export default __webpack_public_path__ + \"static/media/ico-SleepDentistryTrue.66a72de6.svg\";","import ApplianceFalse from '../../assets/images/indications/ico-ApplianceFalse.svg';\nimport ApplianceTrue from '../../assets/images/indications/ico-ApplianceTrue.svg';\nimport DentureFalse from '../../assets/images/indications/ico-DentureFalse.svg';\nimport DentureTrue from '../../assets/images/indications/ico-DentureTrue.svg';\nimport GuidedSurgeryFalse from '../../assets/images/indications/ico-GuidedSurgeryFalse.svg';\nimport GuidedSurgeryTrue from '../../assets/images/indications/ico-GuidedSurgeryTrue.svg';\nimport OrthodonticFalse from '../../assets/images/indications/ico-OrthodonticFalse.svg';\nimport OrthodonticTrue from '../../assets/images/indications/ico-OrthodonticTrue.svg';\nimport RestorativeAndImplantFalse from '../../assets/images/indications/ico-RestorativeAndImplantFalse.svg';\nimport RestorativeAndImplantTrue from '../../assets/images/indications/ico-RestorativeAndImplantTrue.svg';\nimport SleepDentistryFalse from '../../assets/images/indications/ico-SleepDentistryFalse.svg';\nimport SleepDentistryTrue from '../../assets/images/indications/ico-SleepDentistryTrue.svg';\n\n// Note: the strings for indications come from CS Connect documentation (bitbucket: csdental/CS Connect/cscdocs/docs/thirdparty/README.md)\n// Note: order should be consistent with Global Export Tool\nexport enum Indications {\n RESTORE_IMPLANT = \"RESTORE_IMPLANT\",\n GUIDED_SURGERY = \"GUIDED_SURGERY\",\n ORTHODONTICS = \"ORTHODONTICS\",\n SLEEP = \"SLEEP\",\n DENTURE = \"DENTURE\",\n APPLIANCE = \"APPLIANCE\"\n}\n\n// Note: tooltips should be consistent with Global Export Tool\nexport const toTooltip = (indication: string) => {\n\tswitch (indication) {\n\t\tcase Indications.RESTORE_IMPLANT:\n return \"Restorative/Implant\";\n case Indications.GUIDED_SURGERY:\n return \"Guided surgery\";\n case Indications.ORTHODONTICS:\n return \"Orthodontic\";\n case Indications.SLEEP:\n return \"Sleep dentistry\";\n case Indications.DENTURE:\n return \"Denture\";\n case Indications.APPLIANCE:\n return \"Appliance\";\n default:\n return \"\";\n }\n};\n\nexport const toIcon = (indication: string, allowed: boolean) => {\n switch (indication) {\n case Indications.RESTORE_IMPLANT:\n return allowed ? RestorativeAndImplantTrue : RestorativeAndImplantFalse;\n case Indications.GUIDED_SURGERY:\n return allowed ? GuidedSurgeryTrue : GuidedSurgeryFalse;\n case Indications.ORTHODONTICS:\n return allowed ? OrthodonticTrue : OrthodonticFalse;\n case Indications.SLEEP:\n return allowed ? SleepDentistryTrue : SleepDentistryFalse;\n case Indications.DENTURE:\n return allowed ? DentureTrue : DentureFalse;\n case Indications.APPLIANCE:\n return allowed ? ApplianceTrue : ApplianceFalse;\n default:\n return undefined;\n }\n};","import { LinearProgress, Paper, Switch, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Grid, Tooltip } from '@mui/material';\r\nimport { Pagination } from '@mui/material';\r\nimport React from 'react'\r\nimport advanced from '../../../../assets/images/advanced.svg';\r\nimport { getQuickConnectPartners, IQuickConnectPartner } from '../../../../services/quickConnectPartnersService';\r\nimport { Indications, toTooltip, toIcon } from '../../../../enum/FleetPortalMode/Indications'\r\nimport { useTranslation } from 'react-i18next';\r\nimport classes from './AdminQuickConnectPartners.module.scss'\r\n \r\nexport default function AdminQuickConnectPartners(props: any) {\r\n const itemPerPage = 10;\r\n const logoUrlStart = 'data:image/';\r\n const [currentPage, setCurrentPage] = React.useState(1);\r\n const [csdQuickConnectPartners, setCsdQuickConnectPartners] = React.useState([]);\r\n const [isQCPLoading, setQCPLoading] = React.useState(false);\r\n const [count, setCount] = React.useState(0); \r\n const {t} = useTranslation();\r\n const handleChange = React.useCallback( async (event: any, value: number) => {\r\n setCurrentPage(value);\r\n setQCPLoading(true);\r\n const csdQuickConnectPartners = await getQuickConnectPartners(\r\n (value - 1) * itemPerPage,\r\n itemPerPage\r\n );\r\n setQCPLoading(false);\r\n setCsdQuickConnectPartners(csdQuickConnectPartners?.value);\r\n setCount(csdQuickConnectPartners.count);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n handleChange(null, 1);\r\n }, [handleChange]);\r\n\r\n // This returns for a given partner the graphic object containing its indications icons and tooltips\r\n const createIndicationsForPartner = (partner: IQuickConnectPartner) => {\r\n const displayedIndications = [];\r\n for (const indication in Indications) {\r\n const tooltipText = toTooltip(indication); \r\n const translatedTooltipText = t(tooltipText);\r\n displayedIndications.push(\r\n \r\n \"edit\"\r\n \r\n );\r\n }\r\n return displayedIndications;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

{`${count} result${\r\n count > 1 ? 's' : ''\r\n }`}

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t('Lab_Name')}\r\n {t('Advanced')}\r\n {t('Indications')}\r\n {t('Countries')}\r\n {t('Enable')}\r\n \r\n \r\n \r\n {csdQuickConnectPartners.map((csdQuickConnectPartner: IQuickConnectPartner, index: number) => (\r\n \r\n \r\n {currentPage && (\r\n <>\r\n {(currentPage - 1) * (itemPerPage ? itemPerPage : 0) +\r\n index +\r\n 1}\r\n \r\n )}\r\n \r\n \r\n \r\n

{csdQuickConnectPartner.name}

\r\n {csdQuickConnectPartner?.logo?.startsWith(logoUrlStart) ? \r\n {csdQuickConnectPartner.name}\r\n : <>\r\n }\r\n
\r\n
\r\n \r\n {csdQuickConnectPartner.partnerType === 'Advanced' ? {csdQuickConnectPartner.name} : ''}\r\n \r\n {\r\n <>\r\n {createIndicationsForPartner(csdQuickConnectPartner)}\r\n \r\n }\r\n {csdQuickConnectPartner.countries ?? \"All\"}\r\n \r\n {}\r\n \r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n {isQCPLoading && }\r\n {count > 0 && (\r\n \r\n )}\r\n
\r\n )\r\n}\r\n","import { LinearProgress, Paper, Switch, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Grid, Tooltip } from '@mui/material';\r\nimport { Pagination } from '@mui/material';\r\nimport React from 'react'\r\nimport useAuthService from \"../../../../services/authService\";\r\nimport { getMemberQuickConnectPartners, IQuickConnectPartner } from '../../../../services/quickConnectPartnersService';\r\nimport { Indications, toTooltip, toIcon } from '../../../../enum/FleetPortalMode/Indications'\r\nimport { useTranslation } from 'react-i18next';\r\nimport classes from './MemberQuickConnectPartners.module.scss'\r\n\r\nexport default function MemberQuickConnectPartners(props: any) {\r\n const itemPerPage = 10;\r\n const logoUrlStart = 'data:image/';\r\n const [currentPage, setCurrentPage] = React.useState(1);\r\n const [memberQuickConnectPartners, setMemberQuickConnectPartners] = React.useState([]);\r\n const [isQCPLoading, setQCPLoading] = React.useState(false);\r\n const [count, setCount] = React.useState(0);\r\n const [userId, setUserId] = React.useState(\"\"); \r\n const {t} = useTranslation();\r\n\r\n const authService = useAuthService();\r\n\r\n React.useEffect(() => {\r\n authService.getUserId().then(result => {\r\n setUserId(result);\r\n }); \r\n }, [authService]);\r\n\r\n const handleChange = React.useCallback(async (event: any, value: number) => {\r\n if (userId !== \"\") {\r\n setCurrentPage(value);\r\n setQCPLoading(true);\r\n\r\n const memberQuickConnectPartners = await getMemberQuickConnectPartners(\r\n (value - 1) * itemPerPage,\r\n itemPerPage\r\n );\r\n\r\n setQCPLoading(false);\r\n setMemberQuickConnectPartners(memberQuickConnectPartners?.value);\r\n setCount(memberQuickConnectPartners.count);\r\n }\r\n }, [userId]);\r\n\r\n React.useEffect(() => {\r\n handleChange(null, 1);\r\n }, [handleChange,userId]);\r\n\r\n // This returns for a given partner the graphic object containing its indications icons and tooltips\r\n const createIndicationsForPartner = (partner: IQuickConnectPartner) => {\r\n const displayedIndications = [];\r\n for (const indication in Indications) {\r\n const tooltipText = toTooltip(indication); \r\n const translatedTooltipText = t(tooltipText);\r\n displayedIndications.push(\r\n \r\n \"edit\"\r\n \r\n );\r\n }\r\n return displayedIndications;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

{`${count} result${\r\n count > 1 ? 's' : ''\r\n }`}

\r\n
\r\n \r\n \r\n \r\n \r\n {t('No')}\r\n {t('QuickConnectPartners')}\r\n {t('Indications')}\r\n {t('Countries')}\r\n {t('Enable')}\r\n {t('Disable')} status\r\n \r\n \r\n \r\n {memberQuickConnectPartners.map((memberQuickConnectPartner: IQuickConnectPartner, index: number) => (\r\n \r\n \r\n {currentPage && (\r\n <>\r\n {(currentPage - 1) * (itemPerPage ? itemPerPage : 0) +\r\n index +\r\n 1}\r\n \r\n )}\r\n \r\n \r\n \r\n

{memberQuickConnectPartner.name}

\r\n {memberQuickConnectPartner?.logo?.startsWith(logoUrlStart) ? \r\n {memberQuickConnectPartner.name}\r\n : <>\r\n }\r\n
\r\n
\r\n { \r\n <>\r\n {createIndicationsForPartner(memberQuickConnectPartner)}\r\n \r\n }\r\n {\r\n memberQuickConnectPartner.countries?.split(',').join(\", \") ?? \"All\"}\r\n \r\n {}\r\n \r\n \r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n {isQCPLoading && }\r\n {count > 0 && (\r\n \r\n )}\r\n
\r\n )\r\n}\r\n","export const GET_PRACTICES = \"GET_PRACTICES\"\r\nexport const GET_PRACTICES_PENDING = \"@GET_PRACTICES_PENDING\"\r\nexport const GET_PRACTICES_SUCCESS = \"@GET_PRACTICES_SUCCESS\"\r\nexport const GET_PRACTICES_FAIL = \"@GET_PRACTICES_FAIL\"\r\n\r\nexport const ADD_PRACTICES = \"ADD_PRACTICES\"\r\nexport const ADD_PRACTICES_PENDING = \"@ADD_PRACTICES_PENDING\"\r\nexport const ADD_PRACTICES_SUCCESS = \"@ADD_PRACTICES_SUCCESS\"\r\nexport const ADD_PRACTICES_FAIL = \"@ADD_PRACTICES_FAIL\"\r\n\r\nexport const UPDATE_PRACTICES = \"UPDATE_PRACTICES\"\r\nexport const UPDATE_PRACTICES_PENDING = \"@UPDATE_PRACTICES_PENDING\"\r\nexport const UPDATE_PRACTICES_SUCCESS = \"@UPDATE_PRACTICES_SUCCESS\"\r\nexport const UPDATE_PRACTICES_FAIL = \"@UPDATE_PRACTICES_FAIL\"\r\n\r\nexport const DELETE_PRACTICE = \"DELETE_PRACTICE\"\r\nexport const DELETE_PRACTICE_PENDING = \"@DELETE_PRACTICE_PENDING\"\r\nexport const DELETE_PRACTICE_SUCCESS = \"@DELETE_PRACTICE_SUCCESS\"\r\nexport const DELETE_PRACTICE_FAIL = \"@DELETE_PRACTICE_FAIL\"\r\n\r\nexport const RESET_DELETE_ERROR = \"RESET_DELETE_ERROR\"\r\nexport const RESET_ADD_ERROR = \"RESET_ADD_ERROR\"\r\n","export const GET_EXCHANGE_LAB = \"GET_EXCHANGE_LAB\"\r\nexport const GET_EXCHANGE_LAB_PENDING = \"@GET_EXCHANGE_LAB_PENDING\"\r\nexport const GET_EXCHANGE_LAB_SUCCESS = \"@GET_EXCHANGE_LAB_SUCCESS\"\r\nexport const GET_EXCHANGE_LAB_FAIL = \"@GET_EXCHANGE_LAB_FAIL\"","import { GET_PRACTICES_SUCCESS, UPDATE_PRACTICES_SUCCESS } from '../type/practices'\r\nimport { GET_EXCHANGE_LAB_SUCCESS } from '../type/exchangeLab'\r\nimport { IPracticeAction } from '../action/practices'\r\nimport IAddress from '../../interfaces/IAddress'\r\nimport { CountryCode } from '../../shared/enums/CountryCode';\r\n\r\nexport interface IAddressState {\r\n address: {\r\n [key: string]: IAddress\r\n }\r\n}\r\n\r\nconst initialState: IAddressState = {\r\n address: {}\r\n}\r\n\r\nconst FormatAddress = (address: any) => {\r\n if (address) {\r\n const countrySelected = Object.entries(CountryCode).map(([key, value]) => ({ key: key, country: value })).filter(item => item.key === address.countryCode);\r\n const line2 = address.line2 ? `, ${address.line2}` : \"\";\r\n const line3 = address.line3 ? `, ${address.line3}` : \"\";\r\n const region = address.region ? `, ${address.region}` : \"\";\r\n return `${address.line1}${line2}${line3}, ${address.city}, ${address.postCode}${region}, ${countrySelected[0].country ?? \"N/A\"}`;\r\n }\r\n return \"\";\r\n};\r\n\r\nexport default function (\r\n state: IAddressState = initialState,\r\n action: IPracticeAction\r\n) {\r\n switch (action.type) {\r\n case GET_PRACTICES_SUCCESS:\r\n case GET_EXCHANGE_LAB_SUCCESS:\r\n return {\r\n ...state,\r\n address: {\r\n ...state.address,\r\n ...action.data.value.reduce((a: any,b: any) => ({...a, [b.address.recordId]: {\r\n ...b.address,\r\n label: FormatAddress(b.address)\r\n }}), {})\r\n },\r\n }\r\n case UPDATE_PRACTICES_SUCCESS:\r\n return {\r\n ...state,\r\n address: {\r\n ...state.address,\r\n [action.data.addressId] : {\r\n ...action.data.address,\r\n label: FormatAddress(action.data.address)\r\n }\r\n }\r\n }\r\n }\r\n return state\r\n}","export const GET_DEVICES = \"GET_DEVICES\"\r\nexport const GET_DEVICES_PENDING = \"@GET_DEVICES_PENDING\"\r\nexport const GET_DEVICES_SUCCESS = \"@GET_DEVICES_SUCCESS\"\r\nexport const GET_DEVICES_FAIL = \"@GET_DEVICES_FAIL\"\r\n\r\nexport const UPDATE_DEVICE = \"UPDATE_DEVICE\"\r\nexport const UPDATE_DEVICE_PENDING = \"@UPDATE_DEVICE_PENDING\"\r\nexport const UPDATE_DEVICE_SUCCESS = \"@UPDATE_DEVICE_SUCCESS\"\r\nexport const UPDATE_DEVICE_FAIL = \"@UPDATE_DEVICE_FAIL\"","import {\r\n GET_PRACTICES_SUCCESS,\r\n GET_PRACTICES_PENDING,\r\n GET_PRACTICES_FAIL,\r\n UPDATE_PRACTICES_SUCCESS,\r\n UPDATE_PRACTICES_FAIL,\r\n DELETE_PRACTICE_FAIL,\r\n ADD_PRACTICES_SUCCESS,\r\n ADD_PRACTICES_FAIL,\r\n DELETE_PRACTICE_PENDING,\r\n DELETE_PRACTICE_SUCCESS,\r\n RESET_DELETE_ERROR,\r\n RESET_ADD_ERROR\r\n} from '../type/practices'\r\n\r\nimport {\r\n GET_DEVICES_SUCCESS,\r\n} from '../type/device'\r\n\r\nimport { IPracticeAction } from '../action/practices'\r\nimport IPractice from '../../interfaces/IPractice'\r\n\r\nexport interface IPracticeState {\r\n practices: {\r\n [key: string]: IPractice\r\n },\r\n listPractices: {\r\n data: Array,\r\n count: number,\r\n pending: boolean,\r\n delete: {\r\n errorMessage: string,\r\n pending: boolean\r\n }\r\n add: {\r\n errorMessage: string,\r\n pending: boolean\r\n }\r\n }\r\n}\r\n\r\nconst initialState: IPracticeState = {\r\n practices: {},\r\n listPractices: {\r\n data: [],\r\n count: 0,\r\n pending: false,\r\n delete: {\r\n errorMessage: \"\",\r\n pending: false\r\n },\r\n add: {\r\n errorMessage: \"\",\r\n pending: false\r\n }\r\n }\r\n}\r\n\r\nexport default function (\r\n state: IPracticeState = initialState,\r\n action: IPracticeAction\r\n) {\r\n switch (action.type) {\r\n case GET_PRACTICES_PENDING:\r\n return {\r\n ...state,\r\n listPractices: {\r\n ...state.listPractices,\r\n pending: true,\r\n }\r\n }\r\n\r\n case GET_PRACTICES_SUCCESS:\r\n return {\r\n ...state,\r\n practices: {\r\n ...state.practices,\r\n ...action.data.value.reduce((a: any, b: any) => ({ ...a, [b.recordId]: b }), {})\r\n },\r\n listPractices: {\r\n ...state.listPractices,\r\n data: action.data.value.map((practice: any) => practice.recordId),\r\n count: action.data['@odata.count'],\r\n pending: false\r\n }\r\n }\r\n case GET_PRACTICES_FAIL:\r\n return {\r\n ...state,\r\n listPractices: {\r\n ...state.listPractices,\r\n pending: false,\r\n }\r\n }\r\n\r\n case ADD_PRACTICES_SUCCESS:\r\n case RESET_ADD_ERROR:\r\n return {\r\n ...state,\r\n listPractices: {\r\n ...state.listPractices,\r\n add: {\r\n ...state.listPractices,\r\n errorMessage: \"\",\r\n pending: false\r\n }\r\n }\r\n }\r\n\r\n\r\n case UPDATE_PRACTICES_SUCCESS:\r\n case ADD_PRACTICES_SUCCESS:\r\n case RESET_ADD_ERROR:\r\n return {\r\n ...state,\r\n practices: {\r\n ...state.practices,\r\n [action.data.recordId]: {\r\n ...state.practices[action.data.recordId],\r\n name: action.data.name,\r\n emailAddress: action.data.emailAddress,\r\n }\r\n }\r\n }\r\n\r\n case UPDATE_PRACTICES_FAIL:\r\n case ADD_PRACTICES_FAIL:\r\n return {\r\n ...state,\r\n listPractices: {\r\n ...state.listPractices,\r\n add: {\r\n ...state.listPractices,\r\n errorMessage: action.data.message,\r\n pending: false\r\n }\r\n }\r\n }\r\n\r\n case DELETE_PRACTICE_PENDING:\r\n return {\r\n ...state,\r\n listPractices: {\r\n ...state.listPractices,\r\n delete: {\r\n ...state.listPractices,\r\n errorMessage: \"\",\r\n pending: true\r\n }\r\n }\r\n }\r\n case DELETE_PRACTICE_FAIL:\r\n return {\r\n ...state,\r\n listPractices: {\r\n ...state.listPractices,\r\n delete: {\r\n ...state.listPractices,\r\n errorMessage: action.data.message,\r\n pending: false\r\n }\r\n }\r\n }\r\n\r\n case DELETE_PRACTICE_SUCCESS:\r\n case RESET_DELETE_ERROR:\r\n return {\r\n ...state,\r\n listPractices: {\r\n ...state.listPractices,\r\n delete: {\r\n ...state.listPractices,\r\n errorMessage: \"\",\r\n pending: false\r\n }\r\n }\r\n }\r\n case GET_DEVICES_SUCCESS:\r\n return {\r\n ...state,\r\n practices: {\r\n ...state.practices,\r\n ...action.data.value.filter((item: any) => item?.practiceRecordId).reduce((a: any, b: any) => ({ ...a, [b.practiceRecordId]: b.practice }), {})\r\n },\r\n }\r\n }\r\n return state\r\n}","export const GET_USER_ID = \"GET_USER_ID\"\r\nexport const GET_USER_ROLE = \"GET_USER_ROLE\"\r\n\r\nexport const GET_MEMBER_ID = \"GET_MEMBER_ID\"\r\nexport const GET_MEMBER_ID_PENDING = \"@GET_MEMBER_ID_PENDING\"\r\nexport const GET_MEMBER_ID_SUCCESS = \"@GET_MEMBER_ID_SUCCESS\"\r\nexport const GET_MEMBER_ID_FAIL = \"@GET_MEMBER_ID_FAIL\"\r\n","import { GET_USER_ID, GET_USER_ROLE, GET_MEMBER_ID_SUCCESS, GET_MEMBER_ID_PENDING } from '../type/user'\r\nimport { IUserAction } from '../action/user'\r\n\r\nexport interface IUserState {\r\n ID: string,\r\n role: string,\r\n memberID: string\r\n loading: boolean\r\n}\r\n\r\nconst initialState: IUserState = {\r\n loading: true,\r\n ID: '',\r\n role: '',\r\n memberID: ''\r\n}\r\n\r\nexport default function (\r\n state: IUserState = initialState,\r\n action: IUserAction\r\n) {\r\n switch (action.type) {\r\n case GET_USER_ID:\r\n return {\r\n ...state,\r\n ID: action.data\r\n }\r\n case GET_USER_ROLE:\r\n return {\r\n ...state,\r\n role: action.data\r\n }\r\n case GET_MEMBER_ID_PENDING:\r\n return {\r\n ...state,\r\n loading: true\r\n }\r\n case GET_MEMBER_ID_SUCCESS:\r\n return {\r\n ...state,\r\n memberID: action.data.value[0]?.recordId,\r\n loading: false\r\n }\r\n }\r\n return state\r\n}","import {\r\n GET_DEVICES_SUCCESS,\r\n GET_DEVICES_PENDING,\r\n GET_DEVICES_FAIL,\r\n UPDATE_DEVICE_SUCCESS,\r\n} from '../type/device'\r\nimport { IDeviceAction } from '../action/device'\r\nimport IDevice from '../../interfaces/IDevice'\r\n\r\nimport { getName } from \"country-list\";\r\nexport interface IDeviceState {\r\n devices: {\r\n [key: string]: IDevice\r\n },\r\n listDevices: {\r\n data: Array,\r\n count: number,\r\n pending: boolean,\r\n }\r\n}\r\n\r\nconst initialState: IDeviceState = {\r\n devices: {},\r\n listDevices: {\r\n data: [],\r\n count: 0,\r\n pending: false,\r\n }\r\n}\r\n\r\nexport default function (\r\n state: IDeviceState = initialState,\r\n action: IDeviceAction\r\n) {\r\n switch (action.type) {\r\n case GET_DEVICES_PENDING:\r\n return {\r\n ...state,\r\n listDevices: {\r\n ...state.listDevices,\r\n pending: true,\r\n }\r\n }\r\n case GET_DEVICES_SUCCESS:\r\n return {\r\n ...state,\r\n devices: {\r\n ...state.devices,\r\n ...action.data.value.reduce((a: any, b: any) => ({\r\n ...a, [b.serialNumber]: {\r\n entityId: b.entityId,\r\n serialNumber: b.serialNumber,\r\n deviceType: b.deviceType,\r\n practiceId: b.practiceId ? b.practiceId : '',\r\n practice: b.practice ? b.practice : null,\r\n country: b.countryCode ? getName(b.countryCode) : '',\r\n configuration: b.configuration ? b.configuration : '',\r\n firstUseDate: b.firstUseDate ? b.firstUseDate : '',\r\n lastUseDate: b.lastUseDate ? b.lastUseDate : '',\r\n memberName: b.memberName ? b.memberName : '',\r\n memberId: b.memberId ? b.memberId : '',\r\n member: b.member ? b.member : null,\r\n labName: b.labName ? b.labName : '',\r\n recordId: b.recordId ? b.recordId : '',\r\n sapId: b.sapId ? b.sapId : '',\r\n memberRef: b.memberRef ? b.memberRef : ''\r\n }\r\n }), {})\r\n },\r\n listDevices: {\r\n data: action.data.value.map((device: any) => {\r\n return device.serialNumber\r\n }),\r\n count: action.data['@odata.count'],\r\n pending: false\r\n }\r\n }\r\n case GET_DEVICES_FAIL:\r\n return {\r\n ...state,\r\n listDevices: {\r\n ...state.listDevices,\r\n pending: false,\r\n }\r\n }\r\n case UPDATE_DEVICE_SUCCESS:\r\n return {\r\n ...state,\r\n listDevices: {\r\n ...state.listDevices,\r\n add: {\r\n ...state.listDevices,\r\n errorMessage: \"\",\r\n pending: false\r\n }\r\n }\r\n }\r\n }\r\n return state\r\n}\r\n","import {\r\n GET_EXCHANGE_LAB_SUCCESS,\r\n GET_EXCHANGE_LAB_PENDING,\r\n GET_EXCHANGE_LAB_FAIL,\r\n} from '../type/exchangeLab'\r\n\r\nimport { IExchangeLabAction } from '../action/exchangeLab'\r\nimport IExchangeLab from '../../interfaces/IExchangeLab'\r\n \r\nexport interface IExchangeLabState {\r\n exchangeLabs: {\r\n [key: string]: IExchangeLab\r\n },\r\n listExchangeLabs: {\r\n data: Array,\r\n count: number,\r\n pending: boolean,\r\n }\r\n}\r\n \r\nconst initialState: IExchangeLabState = {\r\n exchangeLabs: {},\r\n listExchangeLabs: {\r\n data: [],\r\n count: 0,\r\n pending: false,\r\n }\r\n}\r\n \r\nexport default function (\r\n state: IExchangeLabState = initialState,\r\n action: IExchangeLabAction\r\n) {\r\n switch (action.type) {\r\n case GET_EXCHANGE_LAB_PENDING:\r\n return {\r\n ...state,\r\n listExchangeLabs: {\r\n ...state.listExchangeLabs,\r\n pending: true,\r\n }\r\n }\r\n \r\n case GET_EXCHANGE_LAB_SUCCESS:\r\n return {\r\n ...state,\r\n exchangeLabs: {\r\n ...state.exchangeLabs,\r\n ...action.data.value.reduce((a: any, b: any) => ({ ...a, [b.recordId]: b }), {})\r\n },\r\n listExchangeLabs: {\r\n ...state.listExchangeLabs,\r\n data: action.data.value.map((practice: any) => practice.recordId),\r\n count: action.data['@odata.count'],\r\n pending: false\r\n }\r\n }\r\n case GET_EXCHANGE_LAB_FAIL:\r\n return {\r\n ...state,\r\n listExchangeLabs: {\r\n ...state.listExchangeLabs,\r\n pending: false,\r\n }\r\n }\r\n }\r\n return state\r\n}","import { combineReducers } from 'redux'\r\n\r\nimport addressReducer, { IAddressState } from './address'\r\nimport practiceReducer, { IPracticeState } from './practices'\r\nimport userReducer, { IUserState } from './user'\r\nimport deviceReducer, { IDeviceState } from './device';\r\nimport exchangeLabReducer, { IExchangeLabState } from './exchangeLab'\r\n\r\nexport interface IRootStoreState {\r\n practices: IPracticeState,\r\n address: IAddressState,\r\n user: IUserState,\r\n device: IDeviceState,\r\n exchangeLab: IExchangeLabState\r\n}\r\n\r\nexport default combineReducers({\r\n practices: practiceReducer,\r\n address: addressReducer,\r\n user: userReducer,\r\n device: deviceReducer,\r\n exchangeLab: exchangeLabReducer\r\n})","import { Store, createStore } from 'redux'\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport rootReducer, { IRootStoreState } from './reducer'\r\nimport { IRootActions } from './action'\r\n\r\ntype DispatchType = (args: IRootActions) => IRootActions\r\n\r\nexport const store: Store & {\r\n dispatch: DispatchType\r\n }= createStore(rootReducer, composeWithDevTools() )\r\n\r\n\r\n\r\nexport type RootState = ReturnType\r\n\r\nexport type AppDispatch = typeof store.dispatch","import getLoadedConfig from \"../appConfigService\";\r\nimport { store } from '../../redux/store';\r\nimport http from \"./http\";\r\n\r\nexport default async (path: string, method: 'get' | 'post' | 'put' | 'delete', action: string, body?: any, apiType: \"standard\" | \"odata\" = \"standard\") => {\r\n\r\n return new Promise((resolve, reject) => {\r\n store.dispatch({ type: `@${action}_PENDING` })\r\n const baseApiPath = apiType === \"odata\" ? getLoadedConfig().oDataUrl : getLoadedConfig().apiUrl;\r\n http[method](`${baseApiPath}${path}`, body).then((response) => {\r\n if (response.status >= 200 || response.status <= 300)\r\n store.dispatch({ type: `@${action}_SUCCESS`, data: response.data })\r\n\r\n resolve(\"\");\r\n }).catch(err => {\r\n store.dispatch({ type: `@${action}_FAIL`, data: err })\r\n reject(\"\");\r\n });\r\n });\r\n}\r\n","// Function for get Practice\r\n\r\nimport requestApi from '../request'\r\nimport getParams from '../getParams'\r\nimport { GET_PRACTICES } from '../../../redux/type/practices';\r\n\r\ninterface IGetPracticesParams {\r\n filter?: string,\r\n top: number,\r\n skip?: number,\r\n}\r\n\r\nconst getPractices = async (params: IGetPracticesParams) => {\r\n const path = `Practices${getParams({ ...params, expand: 'Address', count: 'true' })}`;\r\n requestApi(path, 'get', GET_PRACTICES, null, \"odata\")\r\n}\r\n\r\nexport default getPractices","export default (params: any) => {\r\n return Object.entries(params).map(([key, value], index) => {\r\n return index === 0 ? `?$${key}=${value}` : `&$${key}=${value}`\r\n }).reduce((a,b) => a + b)\r\n}","// Function for get Practice\r\n\r\nimport requestApi from '../request'\r\nimport { ADD_PRACTICES } from '../../../redux/type/practices';\r\n\r\ninterface IPostPracticesParams {\r\n name: string,\r\n email: string,\r\n address: {\r\n line1: string,\r\n city: string,\r\n region: string,\r\n zip: string,\r\n country: string,\r\n }\r\n}\r\n\r\nconst addPractice = async (params: IPostPracticesParams) => {\r\n\r\n const path = `Practices/Add`;\r\n\r\n const body = {\r\n \"Name\": params.name,\r\n \"EmailAddress\": params.email,\r\n \"Line1\": params.address.line1,\r\n \"Line2\": \"\",\r\n \"Line3\": \"\",\r\n \"City\": params.address.city,\r\n \"Region\": params.address.region,\r\n \"PostCode\": params.address.zip,\r\n \"CountryCode\": params.address.country\r\n }\r\n await requestApi(path, 'post', ADD_PRACTICES, body)\r\n}\r\n\r\nexport default addPractice","import { IRootStoreState } from '../../reducer'\r\n\r\nimport { createSelector } from 'reselect'\r\n\r\nexport const selectNbResult = (state: IRootStoreState) => state.practices.listPractices.count\r\nexport const pendingListPractices = (state: IRootStoreState) => state.practices.listPractices.pending\r\nexport const pendingDeletePractice = (state: IRootStoreState) => state.practices.listPractices.delete.pending\r\nexport const errorMessageDeletePractice = (state: IRootStoreState) => state.practices.listPractices.delete.errorMessage\r\nexport const errorMessageAddPractice = (state: IRootStoreState) => state.practices.listPractices.add.errorMessage;\r\nconst selectListPractice = (state: IRootStoreState) => state.practices.listPractices.data\r\nexport const selectPractices = (state: IRootStoreState) => state.practices.practices\r\nconst selectAddress = (state: IRootStoreState) => state.address.address\r\n\r\nexport const selectTablePractice = createSelector(\r\n selectListPractice,\r\n selectPractices,\r\n selectAddress,\r\n (listPractices, practices, address) => listPractices.map((item) => ({\r\n recordId: practices[item].recordId,\r\n name: practices[item].name,\r\n emailAddress: practices[item].emailAddress,\r\n address: address[practices[item].addressId].label,\r\n addressForm: {\r\n line1: address[practices[item].addressId].line1,\r\n city: address[practices[item].addressId].city,\r\n region: address[practices[item].addressId].region,\r\n zip: address[practices[item].addressId].postCode,\r\n country: address[practices[item].addressId].countryCode,\r\n }\r\n }))\r\n)\r\n\r\nexport const selectPractice = createSelector(\r\n selectPractices,\r\n selectAddress,\r\n (_: any, recordId: string) => recordId,\r\n (practices, address, recordId) => ({\r\n recordId: practices[recordId].recordId,\r\n name: practices[recordId].name,\r\n emailAddress: practices[recordId].emailAddress,\r\n addressId: practices[recordId].addressId,\r\n address: address[practices[recordId].addressId]\r\n })\r\n)","// Function for get Practice\r\n\r\nimport requestApi from '../request'\r\nimport { UPDATE_PRACTICES } from '../../../redux/type/practices';\r\nimport { store } from '../../../redux/store';\r\nimport { selectPractice } from '../../../redux/selector/practices/index';\r\n\r\ninterface IUpdatePracticesParams {\r\n recordId: string,\r\n form: {\r\n name: string,\r\n email: string,\r\n address: {\r\n line1: string,\r\n city: string,\r\n zip: string,\r\n country: string,\r\n region: string\r\n }\r\n }\r\n}\r\n\r\nconst updatePractice = async (params: IUpdatePracticesParams) => {\r\n const path = `Practices/${params.recordId}`;\r\n const data = selectPractice(store.getState(), params.recordId)\r\n\r\n const { name, email, address } = params.form\r\n const paramsRequest = {\r\n RecordId: data.recordId,\r\n Name: name,\r\n EmailAddress: email,\r\n addressId: data.addressId,\r\n Address: {\r\n RecordId: data.address.recordId,\r\n Line1: address.line1,\r\n Line2: data.address.line2,\r\n Line3: data.address.line3,\r\n City: address.city,\r\n Region: address.region,\r\n PostCode: address.zip,\r\n CountryCode: address.country\r\n }\r\n }\r\n\r\n await requestApi(path, 'put', UPDATE_PRACTICES, paramsRequest)\r\n}\r\n\r\nexport default updatePractice","// Delete a Practice api\r\n\r\nimport requestApi from '../request'\r\nimport { DELETE_PRACTICE } from '../../../redux/type/practices';\r\n\r\nconst deletePractice = async (recordId: string) => {\r\n const path = `Practices(${recordId})`;\r\n await requestApi(path, 'delete', DELETE_PRACTICE, null, \"odata\")\r\n}\r\n\r\nexport default deletePractice\r\n\r\n","import { RESET_DELETE_ERROR } from '../type/practices'\r\nimport { RESET_ADD_ERROR } from '../type/practices'\r\n\r\nexport type IPracticeAction = {\r\n type: string,\r\n data?: any\r\n}\r\n\r\nexport const resetErrorMessage: IPracticeAction = {\r\n type: RESET_DELETE_ERROR\r\n}\r\n\r\nexport const resetAddErrorMessage: IPracticeAction = {\r\n type: RESET_ADD_ERROR\r\n}","import React, { useEffect, useState } from 'react'\r\nimport { useSelector, useDispatch } from 'react-redux'\r\n\r\n//api\r\nimport {getPractices, addPractice, updatePractice, deletePractice} from '../../services/api/practices'\r\n\r\n//translation\r\nimport { useTranslation } from 'react-i18next';\r\n\r\n//component\r\nimport { SearchBar, PracticeForm } from '../../components/shared'\r\nimport {\r\n Button, \r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n Paper,\r\n CircularProgress,\r\n IconButton,\r\n makeStyles\r\n} from \"@mui/material\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport { Pagination } from \"@mui/material\";\r\nimport AddIcon from \"@mui/icons-material/Add\";\r\nimport DeleteIcon from \"@mui/icons-material/Delete\";\r\n\r\n//Style\r\nimport styles from './Practice.module.scss'\r\n\r\n//redux\r\nimport { selectTablePractice, selectNbResult, pendingListPractices, errorMessageDeletePractice, errorMessageAddPractice } from '../../redux/selector/practices';\r\nimport { IPractice } from '../../components/shared/Organisms/PracticeForm/IPracticeForm';\r\nimport { resetErrorMessage } from '../../redux/action/practices'\r\nimport { resetAddErrorMessage } from '../../redux/action/practices'\r\n\r\n//Delete dialog\r\nimport CustomizedDialog from \"../../components/Dialogs/CustomizedDialog\";\r\nimport ConfirmDeleteDialog from \"../../components/Dialogs/ConfirmDeleteDialog\";\r\nimport { getCode } from 'country-list';\r\n\r\n// Config\r\nconst nbPerPage: number = 10\r\nconst fieldsFilters: Array = ['name', 'emailAddress', 'address/line1', 'address/line2', 'address/line3', 'address/city', 'address/postCode', 'address/countryCode', 'address/region', ]\r\n\r\nconst Practice: React.FC = () => {\r\n \r\n const initForm = {\r\n name: '',\r\n email: '',\r\n address: {\r\n line1: '',\r\n city: '',\r\n zip: '',\r\n country: '',\r\n region:''\r\n }\r\n }\r\n //const translation\r\n const {t} = useTranslation();\r\n\r\n // const local\r\n const [page, setPage] = useState(1)\r\n const [filter, setFilter] = useState('')\r\n\r\n const [openFormPractice, setOpenFormPractice] = useState(false)\r\n const [editFormPractice, setEditFormPractice] = useState(initForm)\r\n const [ idSelected, setIdSelected ] = useState('')\r\n\r\n // const delete dialog\r\n const [openDeleteDialog, setOpenDeleteDialog] = React.useState(false);\r\n\r\n // const redux\r\n const nbResult = useSelector(selectNbResult)\r\n const tableData = useSelector(selectTablePractice)\r\n const pending = useSelector(pendingListPractices)\r\n const errorMessageDelete = useSelector(errorMessageDeletePractice);\r\n const errorMessageAdd = useSelector(errorMessageAddPractice);\r\n const dispatch = useDispatch();\r\n\r\n //Init data practice page 1\r\n useEffect(() => {\r\n getPractices({\r\n top: nbPerPage,\r\n skip: 0,\r\n })\r\n }, []);\r\n\r\n const closeDialog = () => {\r\n setOpenDeleteDialog(false);\r\n dispatch(resetErrorMessage);\r\n };\r\n\r\n const closeFormDialog = () => {\r\n setOpenFormPractice(false);\r\n dispatch(resetAddErrorMessage);\r\n };\r\n\r\n const generateFilter = (fields: Array, value: string) => {\r\n var fieldsString: string = ''\r\n value = value.toLowerCase();\r\n fields.forEach((field: string, index: number) => {\r\n if(field !== 'address/countryCode')\r\n index < 1 ? fieldsString += `contains(tolower(${field}),'${value}')` : fieldsString += ` or contains(tolower(${field}),'${value}')`\r\n })\r\n // Search only on country field \r\n var countryCode = getCode(value);\r\n countryCode = countryCode?.toLowerCase();\r\n if(countryCode)\r\n fieldsString += `or contains(tolower(address/countryCode),'${countryCode}')`\r\n\r\n return fieldsString\r\n }\r\n\r\n const removePractice = async () => {\r\n deletePractice(idSelected)\r\n .then(() => {\r\n setIdSelected('')\r\n closeDialog();\r\n const count = Math.ceil(nbResult / nbPerPage);\r\n let currentPage = page;\r\n if(nbResult - 1 === nbPerPage * (count - 1)) \r\n currentPage=page -1;\r\n getPractices({\r\n top: nbPerPage,\r\n skip: (currentPage - 1) > 0 ? (currentPage - 1)* nbPerPage : 0,\r\n filter: generateFilter(fieldsFilters, filter)\r\n })\r\n setPage((currentPage - 1) > 0 ? currentPage: 1);\r\n })\r\n}\r\n\r\n return (\r\n <>\r\n {\r\n setEditFormPractice(value)\r\n }}\r\n open={openFormPractice}\r\n setOpen={closeFormDialog}\r\n saveRequest={async () => {\r\n idSelected === '' ?\r\n addPractice(editFormPractice).then(() => {\r\n getPractices({\r\n top: nbPerPage,\r\n skip: (page - 1) * nbPerPage,\r\n filter: generateFilter(fieldsFilters, filter)\r\n })\r\n closeFormDialog(); \r\n }) : updatePractice({ recordId: idSelected, form: editFormPractice}).then(() => {\r\n closeFormDialog(); \r\n setIdSelected('')})\r\n }}\r\n errorMessage={errorMessageAdd}\r\n />\r\n
\r\n \r\n \r\n \r\n {\r\n setFilter('')\r\n getPractices({\r\n top: nbPerPage,\r\n skip: 0\r\n })\r\n }}\r\n onRequestSearch={(value:string) => {\r\n setFilter(value)\r\n setPage(1)\r\n getPractices({\r\n top: nbPerPage,\r\n skip: 0,\r\n filter: generateFilter(fieldsFilters, value)\r\n })\r\n }}\r\n tooltipText={t('PracticeEmailAddress')}\r\n buttonLabel={t('Search')}\r\n placeholder={t('PracticeEmailAddress')}/>\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {nbResult > 0 &&

{t(`result`, {count: nbResult})}

}\r\n
\r\n {nbResult > 0 ? (\r\n <>\r\n \r\n \r\n \r\n \r\n No\r\n {t('Practice')}\r\n {t('Email_Address')}\r\n {t('Address')}\r\n {t('Actions')}\r\n \r\n \r\n \r\n {tableData.map((row: any, index: number) => (\r\n \r\n \r\n {nbPerPage * (page-1) + index+1 }\r\n \r\n {row?.name}\r\n {row?.emailAddress}\r\n {row?.address}\r\n \r\n {\r\n setEditFormPractice({\r\n name: row?.name,\r\n email: row?.emailAddress,\r\n address: row?.addressForm\r\n });\r\n setOpenFormPractice(true)\r\n setIdSelected(row?.recordId)\r\n }} >\r\n \r\n \r\n {\r\n setIdSelected(row?.recordId)\r\n setOpenDeleteDialog(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n {\r\n setPage(currentPage)\r\n getPractices({\r\n top: nbPerPage,\r\n skip: (currentPage - 1) * nbPerPage,\r\n filter: generateFilter(fieldsFilters, filter)\r\n })\r\n }}\r\n color=\"primary\"\r\n page={page}\r\n />\r\n \r\n ) : !!pending ? () : ({t('no_result')})} \r\n \r\n )\r\n}\r\n\r\nexport default Practice","import Practice from './Practice'\r\n\r\nexport default Practice","import http from \"./api/http\";\r\nimport getLoadedConfig from \"./appConfigService\";\r\nimport { IExchangeLabModel } from './labExchangeModel';\r\nimport {\r\n IDevice,\r\n IDeviceConfiguration,\r\n IPartnerDevicesConfiguration,\r\n} from \"../shared/interfaces/IDeviceList\";\r\n\r\n/* cs admin */\r\nexport interface IDeviceCsAdminResultFLP {\r\n serialNumber: string;\r\n active: boolean;\r\n countryCode: string;\r\n deviceType: string;\r\n entityId: number;\r\n practiceName: string;\r\n status: string;\r\n userRef: string;\r\n userTypeCode: string;\r\n}\r\nexport interface IDeviceCsAdminResultListFLP {\r\n count: number;\r\n value: IDevice[];\r\n}\r\n\r\n/* member */\r\nexport interface IDeviceResultModelFLP {\r\n serialNumber: string;\r\n configuration: string;\r\n iosType: string;\r\n dateActivation: string;\r\n memberId: string;\r\n practiceId: string;\r\n recordId: string;\r\n recordCreated: string;\r\n member: any;\r\n practice: any;\r\n}\r\nexport interface IDeviceResultListFLP {\r\n count: number;\r\n value: IDevice[];\r\n}\r\n\r\nexport const getDevicesForCsAdmin = async (\r\n start: number,\r\n numberOfDevice: number\r\n): Promise => {\r\n const config = getLoadedConfig();\r\n let url =\r\n config.oDataUrl +\r\n `Devices?$count=true&$top=${numberOfDevice}&$skip=${start}`;\r\n\r\n const req = await http.get(url);\r\n const count = req.data[\"@odata.count\"];\r\n const resp: IDeviceCsAdminResultListFLP = {\r\n count: count ? parseInt(count) : 0,\r\n value: req.data?.value,\r\n };\r\n return resp;\r\n};\r\n\r\nexport const getMemberSerialNumbers = async () => {\r\n const config = getLoadedConfig();\r\n\r\n let url =\r\n config.oDataUrl +\r\n `Devices/GetForMember()?$expand=deviceConfiguration($expand=Practice($expand=address($select=city, countryCode, postCode,region)),member($select=name,recordId))&$select=serialNumber`;\r\n\r\n const req = await http.get(url);\r\n const resp: IDevice[] = req.data?.value;\r\n return resp;\r\n};\r\n\r\nexport const addOrUpdateDeviceConfiguration = async (deviceConfigurationId: string, memberId:string|undefined,\r\n serialNumber:string, labs: IExchangeLabModel[], practiceId: string|undefined): Promise => {\r\n\r\n const labsList = labs.map((l: IExchangeLabModel) => {\r\n return {\r\n deviceId: deviceConfigurationId ? deviceConfigurationId : undefined,\r\n partnerId: l.recordId\r\n };\r\n });\r\n\r\n const reqData = {\r\n recordId: deviceConfigurationId ? deviceConfigurationId : undefined,\r\n serialNumber: serialNumber,\r\n memberId: memberId,\r\n practiceId: practiceId,\r\n partnerDevices: labsList\r\n };\r\n\r\n const query = 'Devices(' + deviceConfigurationId + ')';\r\n const req = await http.put( getLoadedConfig().oDataUrl + query, reqData);\r\n\r\n return req?.data;\r\n}\r\n\r\nexport const formatLabsName = (devicesConf: IPartnerDevicesConfiguration[]): string =>\r\ndevicesConf ? devicesConf.map((it: IPartnerDevicesConfiguration) => it?.partner?.name)?.join(\", \") : \"\";","import http from \"./api/http\";\nimport getLoadedConfig from \"./appConfigService\";\nimport { IExchangeLabModel } from \"./labExchangeModel\";\n\nexport const getAssociatedPartners = async (deviceConfigurationId:string):Promise =>\n{\n const config = getLoadedConfig();\n\n const query = `PartnerDevices/GetPartners?deviceId=${deviceConfigurationId}&$orderby=RecordCreated desc`;\n\n const req = await http.get(config.apiUrl + query);\n\n return req.data;\n}\n\nexport const assignPartners = async (deviceConfigurationId:string, partnerId:string):Promise =>\n{\n const config = getLoadedConfig();\n\n const query = \"PartnerDevices/AssignPartners\";\n\n const req = await http.post(config.apiUrl + query,\n {\n deviceConfigurationId: deviceConfigurationId,\n partnerId: partnerId\n }\n );\n\n return req.data;\n}\n\nexport const unassignPartners = async (deviceConfigurationId:string, partnerId:string):Promise =>\n{\n const config = getLoadedConfig();\n\n const query = \"PartnerDevices/UnassignPartners\";\n\n const req = await http.post(config.apiUrl + query,\n {\n deviceConfigurationId: deviceConfigurationId,\n partnerId: partnerId\n }\n );\n\n return req.data;\n}\n\nexport const assignPractice = async(deviceConfigurationId:string, practiceId:string):Promise =>\n{\n const config = getLoadedConfig();\n\n const query = \"PartnerDevicesConfiguration/AssignPractice\";\n\n const req = await http.post(config.apiUrl + query,\n {\n deviceConfigurationId: deviceConfigurationId,\n practiceId: practiceId\n }\n );\n\n return req.data;\n}\n","import http from \"../services/api/http\";\r\nimport getLoadedConfig from \"../services/appConfigService\";\r\nimport IPractice from \"../interfaces/IPractice\";\r\n\r\nexport const getPractices = async (query: string): Promise => {\r\n const config = getLoadedConfig();\r\n const path = `Practices?$filter=contains(Name,'` + query + `')`;\r\n const req = await http.get(config.oDataUrl + path);\r\n return req.data[\"value\"] as IPractice[];\r\n}\r\n","import http from \"../services/api/http\";\r\nimport getLoadedConfig from \"../services/appConfigService\";\r\nimport IMember from \"../interfaces/IMember\";\r\n\r\nexport const getMembers = async (query: string): Promise => {\r\n const config = getLoadedConfig();\r\n const path = `Members?$filter=contains(Name,'` + query + `')`;\r\n const req = await http.get(config.oDataUrl + path);\r\n return req.data[\"value\"] as IMember[];\r\n}\r\n","import React from \"react\";\nimport { Button, CircularProgress } from \"@mui/material\";\nimport { Stack } from '@mui/material';\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport { IExchangeLabModel } from \"../../../services/labExchangeModel\";\nimport { getAssociatedPartners } from \"../../../services/labExchangeDeviceService\";\nimport IPractice from \"../../../interfaces/IPractice\";\nimport { getPractices, getMembers } from \"../../../api\";\nimport { Alert } from \"@mui/material\";\nimport { useTranslation } from 'react-i18next'; \nimport IMember from \"../../../interfaces/IMember\";\n \n\ninterface IProps {\n deviceId: string;\n userId: string;\n loading?: boolean;\n errorMessage?: string;\n exchangeLabsForMember?: IExchangeLabModel[];\n practice?: IPractice;\n member?: IMember;\n saveData?: (labs: IExchangeLabModel[], practice: IPractice | undefined, member: IMember|undefined) => void;\n closeDialog?: () => void;\n}\n\nexport default function EditDeviceFlpDialog(props: IProps) {\n const {\n saveData,\n closeDialog,\n deviceId,\n userId,\n loading,\n errorMessage,\n exchangeLabsForMember,\n practice,\n member,\n } = props;\n \n const {t} = useTranslation();\n const [exchangeLabsDevice, setExchangeLabsDevice] =\n React.useState();\n const [selectedLabs, setSelectedLabs] = React.useState(\n []\n );\n const [practiceList, setPracticeList] = React.useState([]);\n const [selectedPractice, setSelectedPractice] = React.useState(undefined);\n\n const [subMembersList, setSubMembersList] = React.useState([]);\n const [selectedSubMember, setSelectedSubMember] = React.useState(undefined);\n\n const [isLoading, setLoading] = React.useState(false);\n const [localErrorMessage, SetLocalErrorMessage] =\n React.useState(errorMessage);\n\n React.useEffect(() => {\n\n setSelectedPractice(practice);\n setSelectedSubMember(member);\n // Get practices list\n getPractices(\"\")\n .then((data: IPractice[]) => {\n setPracticeList(data);\n })\n .catch((error: any) => {\n if (error?.statusCode !== 404)\n SetLocalErrorMessage(t('FailedPracticesListMsg'));\n })\n .finally(() => {\n setLoading(false);\n });\n\n // Get members list\n getMembers(\"\")\n .then((data: IMember[]) => {\n setSubMembersList(data);\n })\n .catch((error: any) => {\n if (error?.statusCode !== 404)\n SetLocalErrorMessage(t('FailedSubMembersListMsg'));\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n React.useEffect(() => {\n if (userId) {\n setLoading(true);\n\n // Get associated device to the current device\n if (\n !Boolean(exchangeLabsForMember) ||\n exchangeLabsForMember?.length === 0\n ) {\n SetLocalErrorMessage(\n t('NoLabExchangeDeviceMsg')\n );\n setLoading(false);\n } else {\n if (deviceId) {\n getAssociatedPartners(deviceId)\n .then((data: IExchangeLabModel[]) => {\n setExchangeLabsDevice(data);\n setSelectedLabs(data);\n })\n .catch((error: any) => {\n if (error?.statusCode !== 404)\n SetLocalErrorMessage(\n t('FaildAssociatedLabsMsg')\n );\n //else no lab exchange associated to that device\n })\n .finally(() => {\n setLoading(false);\n });\n } else {\n // no deviceId device configuration has not been created\n // it will be created on saving\n setLoading(false);\n }\n }\n }\n }, [userId, deviceId]);\n\n const save = () => {\n if (saveData) {\n saveData(selectedLabs, selectedPractice, selectedSubMember);\n }\n };\n\n return (\n <>\n
\n {localErrorMessage && (\n {localErrorMessage}\n )}\n {!errorMessage && isLoading && (\n
\n \n {t('WaitingDeviceMsg')}\n
\n )}\n {/* If there is no lab exchange do not propose autocomplete */}\n {!isLoading &&\n exchangeLabsForMember &&\n exchangeLabsForMember.length !== 0 && (\n option.name}\n value={selectedLabs}\n getOptionSelected={(\n option: IExchangeLabModel,\n value: IExchangeLabModel\n ) => option.recordId === value.recordId}\n filterSelectedOptions\n onChange={(\n event: any,\n updateValue: IExchangeLabModel[],\n reason: any,\n details: any\n ) => {\n setSelectedLabs(updateValue);\n }}\n renderInput={(params: any) => (\n \n )}\n />\n )}\n \n {!isLoading && practiceList && practiceList.length !== 0 && (\n option.name}\n value={selectedPractice}\n onChange={(event: any, value: any) => setSelectedPractice(value)}\n renderInput={(params: any) => (\n \n )}\n />\n )} \n \n {!isLoading && subMembersList && subMembersList.length !== 0 && (\n option.name}\n value={selectedSubMember}\n onChange={(event: any, value: any) => setSelectedSubMember(value)}\n renderInput={(params: any) => (\n \n )}\n />\n )}\n
\n
\n {closeDialog && ( // remove this condition when the refacto is DONE\n
\n \n {t('Cancel')}\n \n save()}\n variant=\"outlined\"\n className=\"btn-confirm\"\n >\n {loading ? (\n \n ) : (\n <>{t('Save')}\n )}\n \n
\n )}\n
\n \n );\n}\n","import { IRootStoreState } from '../../reducer'\r\nimport { createSelector } from 'reselect'\r\nimport { selectPractices } from '../practices'\r\n\r\nexport const selectNbResult = (state: IRootStoreState) => state.device.listDevices.count\r\nexport const pendingListDevices = (state: IRootStoreState) => state.device.listDevices.pending\r\nconst selectListDevice = (state: IRootStoreState) => state.device.listDevices.data\r\nconst selectDevices = (state: IRootStoreState) => state.device.devices\r\n\r\nexport const selectTableDevices = createSelector(\r\n selectListDevice,\r\n selectDevices,\r\n selectPractices,\r\n (listDevices, devices) => listDevices.map((item: any) => {\r\n return({\r\n entityId: devices[item].entityId,\r\n serialNumber: devices[item].serialNumber,\r\n deviceType: devices[item].deviceType,\r\n countryCode: devices[item].countryCode,\r\n configuration: devices[item].configuration,\r\n firstUseDate: devices[item].firstUseDate,\r\n lastUseDate: devices[item].lastUseDate,\r\n memberName: devices[item].memberName,\r\n memberId: devices[item].memberId,\r\n member: devices[item].member,\r\n practice: devices[item].practice,\r\n labName: devices[item].labName,\r\n recordId: devices[item].recordId,\r\n sapId: devices[item].sapId,\r\n memberRef: devices[item].memberRef\r\n })})\r\n)","// Function for get Practice\r\n\r\nimport { GET_DEVICES } from '../../../redux/type/device';\r\nimport { IUserState } from '../../../redux/reducer/user';\r\nimport { UserRole } from \"../../../shared/enums/UserRole\";\r\nimport http from '../http'\r\nimport getLoadedConfig from '../../appConfigService'\r\nimport { store } from '../../../redux/store';\r\n\r\ninterface IGetDevicesParams {\r\n filter?: string,\r\n top: number,\r\n skip: number,\r\n user: IUserState\r\n}\r\n\r\nconst formatLabsName = (devicesConf: any): string => {\r\n return devicesConf ? devicesConf.map((it: any) => it?.partner?.name)?.join(\", \") : \"\"\r\n};\r\n\r\nconst isCustomerRefValid = (sapId: any, memberRef: any):boolean => {\r\n return true;\r\n/* if (sapId && sapId.length > 0 && memberRef && memberRef.length > 0) {\r\n var refArray = memberRef.split(';')\r\n return refArray.some(e => e === sapId)\r\n } else {\r\n return false\r\n }*/\r\n}\r\n\r\nconst getDevices = async (params: IGetDevicesParams) => {\r\n let path = \"\"\r\n\r\n // Use endpoint by role\r\n if (\r\n UserRole.FLP_ADMINISTRATOR === params.user.role ||\r\n UserRole.FLP_SUPPORT === params.user.role\r\n ) {\r\n path = `Devices?$expand=DeviceConfiguration($expand=Member,Practice($expand=address), PartnerDevices($expand=Partner))&$count=true&$top=${params.top}&$skip=${params.skip}&$orderby=SerialNumber asc${params.filter ? `&$filter=${params.filter}` : ''}`\r\n } else if (UserRole.MEMBER_MANAGER === params.user.role || UserRole.MEMBER_SUB_MANAGER === params.user.role) {\r\n path = `Devices/GetForMember()?$expand=DeviceConfiguration($expand=Member,Practice($expand=address), PartnerDevices($expand=Partner))&$count=true&$top=${params.top}&$skip=${params.skip}&$orderby=SerialNumber asc${params.filter ? `&$filter=${params.filter}` : ''}`\r\n }\r\n\r\n\r\n const config = getLoadedConfig()\r\n\r\n\r\n\r\n return new Promise(async (resolve, reject) => {\r\n // start call api\r\n store.dispatch({ type: `@${GET_DEVICES}_PENDING` })\r\n let devicesValue: any = []\r\n\r\n // Get devices list\r\n await http.get(`${config.oDataUrl}${path}`).then(async (deviceList) => {\r\n if (deviceList.status >= 200 || deviceList.status <= 300) {\r\n deviceList.data.value.map(async (device: any) => {\r\n if(!!device.serialNumber) {\r\n devicesValue.push({\r\n ...device,\r\n configuration: device.deviceConfiguration?.partnerDevices?.length > 0 ? \"Managed\" : \"Standard\",\r\n memberName: device.deviceConfiguration?.member?.name,\r\n memberId: device.deviceConfiguration?.member?.recordId,\r\n member: device.deviceConfiguration?.member,\r\n practiceId: device.deviceConfiguration?.practice?.recordId,\r\n practice: device.deviceConfiguration?.practice,\r\n labName: device.deviceConfiguration?.partnerDevices?.length > 0 ? formatLabsName(device.deviceConfiguration?.partnerDevices) : \"\",\r\n configRecordId: device.deviceConfiguration ? \"\" : device.deviceConfiguration?.recordId,\r\n sapId: device.userRef,\r\n memberRef: device.deviceConfiguration?.member?.userReference\r\n })\r\n }\r\n })\r\n store.dispatch({ type: `@${GET_DEVICES}_SUCCESS`, data: {\r\n ...deviceList.data,\r\n value: devicesValue\r\n }})\r\n }\r\n\r\n resolve(\"\");\r\n }).catch(err => {\r\n store.dispatch({ type: `@${GET_DEVICES}_FAIL`, data: err })\r\n reject(\"\");\r\n });\r\n })\r\n}\r\n\r\nexport default getDevices","// Function for update a device\r\n\r\nimport requestApi from '../request'\r\nimport { UPDATE_DEVICE } from '../../../redux/type/device';\r\n\r\ninterface IUpdateDeviceParams {\r\n recordId: string,\r\n form: {\r\n serialNumbers: string[],\r\n deviceType: string,\r\n memberId: string,\r\n }\r\n}\r\n\r\nconst updateDevice = async (params: IUpdateDeviceParams) => {\r\n const path = `Devices/DevicesForAdmin(${params.recordId})`;\r\n \r\n const body = {\r\n \"serialNumber\": params.form.serialNumbers,\r\n \"deviceType\": params.form.deviceType,\r\n \"memberId\": params.form.memberId\r\n }\r\n await requestApi(path, 'put', UPDATE_DEVICE, body)\r\n}\r\n\r\nexport default updateDevice","import React, { useState, useEffect} from \"react\";\r\nimport Pagination from \"@mui/material/Pagination\";\r\nimport LinearProgress from \"@mui/material/LinearProgress\";\r\nimport {\r\n addOrUpdateDeviceConfiguration,\r\n} from \"../../services/deviceService\";\r\nimport {\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n IconButton,\r\n Tooltip,\r\n} from \"@mui/material\";\r\nimport EditIcon from \"@mui/icons-material/Edit\";\r\nimport CustomizedDialog from \"../../components/Dialogs/CustomizedDialog\";\r\nimport { UserRole } from \"../../shared/enums/UserRole\";\r\nimport EditDeviceFlpDialog from \"../../components/Dialogs/EditDeviceFlpDialog\";\r\nimport {\r\n getAllExchangeLabsForMemberAsync,\r\n} from \"../../services/labExchangeService\";\r\nimport { IExchangeLabModel } from \"../../services/labExchangeModel\";\r\nimport IPractice from \"../../interfaces/IPractice\";\r\nimport { useSelector } from 'react-redux';\r\nimport { selectUser } from '../../redux/selector/user';\r\nimport { selectNbResult, pendingListDevices, selectTableDevices } from '../../redux/selector/devices';\r\nimport getDevices from '../../services/api/device/getDevices';\r\n\r\n//api\r\nimport { updateDevice } from '../../services/api/device'\r\n\r\nimport { SearchBar, DeviceForm } from \"../../components/shared\";\r\nimport styles from './Device.module.scss'\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { FormatDateMMYYYY } from \"../../shared/utils/utils\";\r\nimport { getCode, getName } from \"country-list\";\r\nimport { IDevice } from '../../components/shared/Organisms/DeviceForm/IDeviceForm';\r\nimport { fontStyle } from \"@mui/system\";\r\nimport { InlineFunctions } from \"uglify-js\";\r\nimport IMember from \"../../interfaces/IMember\";\r\n\r\ninterface IProps {\r\n type: string;\r\n}\r\n\r\nconst fieldsFilters: Array = ['serialNumber','userRef','deviceConfiguration/member/name','deviceConfiguration/practice/name','deviceConfiguration/practice/address/countryCode']\r\nconst devicePerPage = 10;\r\n\r\nconst initForm = {\r\n serialNumbers: [] as string[],\r\n deviceType: '',\r\n memberId: '',\r\n}\r\n\r\nexport default function DeviceList(props: IProps) {\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [openDeviceForm, setOpenDeviceForm] = useState(false)\r\n const [editDeviceForm, setEditDeviceForm] = useState(initForm)\r\n const [openDialog, setOpenDialog] = useState(false);\r\n const [editRowIndex, setEditRowIndex] = useState(-1);\r\n const [editRowData, setEditRowData] = useState();\r\n const [ idSelected, setIdSelected ] = useState('')\r\n\r\n const [title, setTitle] = useState(\"\");\r\n\r\n const [isEditDeviceLoading, setEditDeviceLoading] =\r\n useState(false);\r\n const [editDevicemessageError, setEditDeviceMessageError] =\r\n useState(\"\");\r\n const [editDeviceExchangeLabsForMember, setEditDeviceExchangeLabsForMember] =\r\n useState();\r\n\r\n const [filter, setFilter] = useState(\"\")\r\n\r\n // const redux\r\n const user = useSelector(selectUser)\r\n const deviceCount = useSelector(selectNbResult)\r\n const isDeviceLoading = useSelector(pendingListDevices)\r\n const deviceRows = useSelector(selectTableDevices)\r\n\r\n const {t} = useTranslation()\r\n\r\n useEffect(() => {\r\n if (user.memberID !== \"\" && user.role !== UserRole.FLP_ADMINISTRATOR ) {\r\n\r\n // Get all exchange lab that has been added to the current member\r\n // Optimization for edit device management\r\n getAllExchangeLabsForMemberAsync(user.ID).then((labs: any) => {\r\n setEditDeviceExchangeLabsForMember(labs.value);\r\n });\r\n }\r\n }, [user.role, user.ID]);\r\n\r\n // Fetch devices\r\n useEffect(() => {\r\n // handleChange(null, 1);\r\n getDevices({\r\n top: devicePerPage,\r\n user: user,\r\n skip: 0\r\n })\r\n }, []);\r\n\r\n const generateFilter = (fields: Array, value: string) => {\r\n var fieldsString: string = ''\r\n value = value.toLowerCase();\r\n fields.forEach((field: string, index: number) => {\r\n if(field !== 'deviceConfiguration/practice/address/countryCode')\r\n index < 1 ? fieldsString += `contains(tolower(${field}),'${value}')` : fieldsString += ` or contains(tolower(${field}),'${value}')`\r\n })\r\n // Search only on country field \r\n var countryCode = getCode(value);\r\n countryCode = countryCode?.toLowerCase(); \r\n if(countryCode)\r\n {\r\n fieldsString += ` or contains(tolower(deviceConfiguration/practice/address/countryCode),'${countryCode}')`\r\n } \r\n // Search on Labnames \r\n fieldsString += ` or deviceConfiguration/partnerDevices/any(p:contains(tolower(p/partner/name),'${value}'))`\r\n \r\n\r\n return fieldsString\r\n }\r\n\r\n const isCustomerRefValid = (sapId: string, memberRef: string):boolean => {\r\n if ( sapId.length > 0 && memberRef.length > 0) {\r\n var refArray = memberRef.split(',')\r\n return refArray.some(e => e === sapId)\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n const closeDialog = () => {\r\n setOpenDialog(false);\r\n setEditDeviceMessageError(\"\");\r\n setEditDeviceLoading(false);\r\n };\r\n\r\n const closeDeviceForm = () => {\r\n setOpenDeviceForm(false);\r\n setIdSelected('');\r\n };\r\n\r\n const saveEditDevice = async (\r\n labs: IExchangeLabModel[],\r\n practice: IPractice | undefined,\r\n member: IMember | undefined\r\n ) => {\r\n setEditDeviceLoading(true);\r\n\r\n try {\r\n setEditDeviceMessageError(\"\");\r\n const deviceConfigId = editRowData.recordId ? editRowData.recordId : null;\r\n\r\n if (user.memberID !== \"\") {\r\n let deviceConfiguration = await addOrUpdateDeviceConfiguration(\r\n deviceConfigId,\r\n member?.recordId,\r\n editRowData?.serialNumber,\r\n labs,\r\n practice?.recordId\r\n );\r\n if (deviceConfiguration)\r\n editRowData.deviceConfiguration = deviceConfiguration;\r\n else throw new Error(\"Cannot create device configuration\");\r\n }\r\n\r\n getDevices({\r\n top: devicePerPage,\r\n user: user,\r\n skip: (currentPage - 1)*devicePerPage,\r\n filter: generateFilter(fieldsFilters, filter)\r\n })\r\n closeDialog();\r\n handleChange(null, currentPage);\r\n } catch (error: any) {\r\n if (error instanceof Error) setEditDeviceMessageError(error.message);\r\n else setEditDeviceMessageError(\"Internal error\");\r\n }\r\n setEditDeviceLoading(false);\r\n };\r\n\r\n const handleChange = (event: any, value: number) => {\r\n if (value !== currentPage && user.ID.length > 0) {\r\n setCurrentPage(value);\r\n getDevices({\r\n top: devicePerPage,\r\n user: user,\r\n skip: (value - 1) * devicePerPage,\r\n filter: generateFilter(fieldsFilters, filter)\r\n })\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {user.role === UserRole.FLP_ADMINISTRATOR && (\r\n {\r\n setEditDeviceForm(value)\r\n }}\r\n open={openDeviceForm}\r\n setOpen={closeDeviceForm}\r\n saveRequest={async () => {\r\n updateDevice({ recordId: idSelected, form: editDeviceForm }).then(() => {\r\n getDevices({\r\n top: devicePerPage,\r\n user: user,\r\n skip: (currentPage - 1)*devicePerPage,\r\n filter: generateFilter(fieldsFilters, filter)\r\n })\r\n closeDeviceForm();\r\n })\r\n }}\r\n />\r\n )}\r\n
\r\n {\r\n setFilter('')\r\n getDevices({\r\n top: devicePerPage,\r\n user: user,\r\n skip: 0\r\n })\r\n }}\r\n onRequestSearch={(value:string) => {\r\n setFilter(value)\r\n setCurrentPage(1)\r\n getDevices({\r\n top: devicePerPage,\r\n user: user,\r\n skip: 0,\r\n filter: generateFilter(fieldsFilters, value)\r\n })\r\n }}\r\n tooltipText={`${t('SerialNumber')}, ${t('Customer Ref')}, ${t('Member')}, ${t('Lab')}, ${t('Practice')}, ${t('Country')}`}\r\n buttonLabel={`${t('Search')}`} \r\n placeholder={`${t('SerialNumber')}, ${t('Customer Ref')}, ${t('Member')}, ${t('Lab')}, ${t('Practice')}, ${t('Country')}`} >\r\n \r\n
\r\n {deviceCount> 0 &&

{t(`result`, {count: deviceCount})}

}\r\n
\r\n { deviceCount> 0 ? \r\n \r\n \r\n \r\n {`${t('SerialNumber')}`}\r\n Customer Ref\r\n {`${t('Configuration')}`}\r\n {`${t('DeviceType')}`}\r\n {`${t('Activation')}`}\r\n {`${t('Last Connection')}`}\r\n {(user.role === UserRole.MEMBER_MANAGER || user.role === UserRole.MEMBER_SUB_MANAGER) && (\r\n {`${t('Fleet name')}`}\r\n )}\r\n {(user.role !== UserRole.MEMBER_MANAGER && user.role !== UserRole.MEMBER_SUB_MANAGER) && (\r\n {`${t('Member')}`}\r\n )}\r\n {`${t('Lab')}`}\r\n {`${t('Practice')}`}\r\n {`${t('Country')}`}\r\n {(user.role === UserRole.FLP_ADMINISTRATOR || user.role === UserRole.MEMBER_MANAGER) && (\r\n {`${t('Actions')}`}\r\n )}\r\n \r\n \r\n \r\n {deviceRows\r\n .sort((a,b) => { return (a.serialNumber > b.serialNumber ? 1 : -1)})\r\n .map((row: any, index: number) => {\r\n return(\r\n \r\n {row.serialNumber}\r\n {row.sapId}\r\n \r\n {(t(row.configuration))}\r\n \r\n {row.deviceType}\r\n \r\n { FormatDateMMYYYY(row.firstUseDate) }\r\n \r\n \r\n { FormatDateMMYYYY(row.lastUseDate) }\r\n \r\n \r\n {row.memberName || \"\"} \r\n \r\n \r\n \r\n
\r\n {row.labName}\r\n
\r\n \r\n
\r\n \r\n {row.practice?.name}\r\n \r\n \r\n {row.practice?.address?.countryCode ? getName(row.practice?.address?.countryCode) : ''}\r\n \r\n {user.role === UserRole.FLP_ADMINISTRATOR && (\r\n \r\n {\r\n setEditRowIndex(index);\r\n setEditRowData(row);\r\n setEditDeviceForm({\r\n serialNumbers: row?.serialNumber,\r\n deviceType: row?.deviceType,\r\n memberId: row?.memberId\r\n });\r\n setOpenDeviceForm(true);\r\n setIdSelected(row?.recordId)\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n {user.role === UserRole.MEMBER_MANAGER && (\r\n \r\n {\r\n setEditRowIndex(index);\r\n setEditRowData(row);\r\n setTitle(t(\"Edit Device\"));\r\n setOpenDialog(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n )}\r\n
\r\n )})}\r\n
\r\n
\r\n
: {t('no_result')}\r\n }\r\n {isDeviceLoading && }\r\n {deviceCount > 0 && !isDeviceLoading && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n \r\n { title && (\r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n","import Device from './Device'\r\n\r\nexport default Device","// Function for get Practice\r\nimport getLoadedConfig from '../../appConfigService'\r\nimport http from '../http'\r\n\r\nexport const getCases = async (skip: number|null = null, top: number|null = null, startDate?: string, endDate?:string, members?: string[]) => {\r\n let url = getLoadedConfig().oDataUrl + `ConnectCases?$count=true&$orderby=acquisitionDate desc`;\r\n url = top !== null ? `${url}&$top=${top}` : url;\r\n url = skip !== null ? `${url}&$skip=${skip}` : url;\r\n\r\n\r\n if(startDate && endDate)\r\n url = `${url}&$filter=sentDate gt ${startDate} and sentDate lt ${endDate}`;\r\n\r\n const req = await http.get(url);\r\n const res = req.data;\r\n return {\r\n count: res[\"@odata.count\"],\r\n value: res[\"value\"]\r\n }\r\n}\r\n\r\nexport const exportCases = async () => {\r\n const url = getLoadedConfig().apiUrl + `ConnectCases/Export`;\r\n return http.get(url);\r\n}","import React from \"react\";\r\nimport CloudDownloadOutlinedIcon from '@mui/icons-material/CloudDownloadOutlined';\r\nimport {\r\n Button,\r\n LinearProgress,\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n} from \"@mui/material\";\r\nimport { Pagination } from \"@mui/material\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport {getCases, exportCases} from \"../../../services/api/connectCase\";\r\nimport {IConnectCase} from \"../../../interfaces/IConnectCase\";\r\nimport { FormatDateMMYYYY } from \"../../../shared/utils/utils\";\r\nimport moment from 'moment';\r\nimport classes from './CasesList.module.scss'\r\n \r\n\r\ninterface IProps {\r\n type: string;\r\n}\r\n\r\nexport default function CasesList(props: IProps) {\r\n const { type } = props;\r\n const casesPerPage = 20; \r\n const {t} = useTranslation();\r\n\r\n const [isLoading, setLoading] = React.useState(false);\r\n const [cases, setCases] = React.useState([]);\r\n const [casesCount, setCasesCount] = React.useState(0);\r\n const [currentPage, setCurrentPage] = React.useState(0);\r\n\r\n const getCasesList = async (start:number) => {\r\n setLoading(true);\r\n setCurrentPage(start);\r\n const res = await getCases(\r\n (start - 1) * casesPerPage,\r\n casesPerPage\r\n );\r\n setCasesCount(res.count);\r\n setCases(res.value);\r\n setLoading(false);\r\n }\r\n const paginate = (event: any, page: number) => {\r\n if (page !== currentPage) {\r\n getCasesList(page);\r\n }\r\n };\r\n\r\n const startDownload = async() => {\r\n exportCases().then(\r\n response => {\r\n const url = window.URL.createObjectURL(new Blob([response.data])) \r\n const link = document.createElement('a')\r\n link.href = url\r\n const fileName = `ScansReport_${moment().format('YYYYMMDD HHmmss')}.csv`;\r\n link.setAttribute('download', fileName)\r\n document.body.appendChild(link)\r\n link.click()\r\n link.remove()\r\n }\r\n );\r\n }\r\n\r\n React.useEffect(() => {\r\n // Get Connect cases list for current member's fleet\r\n paginate(null, 1)\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {`${casesCount} result${casesCount > 1 ? \"s\" : \"\"}`}\r\n
\r\n
\r\n {\r\n startDownload()\r\n }}\r\n variant=\"contained\"\r\n className={classes.button}\r\n startIcon={}>\r\n {t('Download')}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {t('Practice Name')}\r\n {t('Device SN')}\r\n {t('Case ID')}\r\n {t('Acq Date')}\r\n {t('Sent Date')}\r\n {t('Download Date')}\r\n {t('Lab Name')}\r\n {t(\"User's Last Name\")}\r\n \r\n \r\n \r\n {cases.map((row: IConnectCase, index: number) => (\r\n \r\n {row.addressName}\r\n {row.deviceSN}\r\n {row.caseId}\r\n {FormatDateMMYYYY(row.acquisitionDate)}\r\n {FormatDateMMYYYY(row.sentDate)}\r\n {FormatDateMMYYYY(row.downloadDate)}\r\n {row.laboratoryName}\r\n {row.dentistLastName}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n {/* loader */}\r\n {isLoading && }\r\n {casesCount > 0 && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport {\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n} from \"@mui/material\";\r\nimport { BarChart, LineChart, Bar, Line, Cell, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';\r\nimport { useTranslation } from 'react-i18next';\r\nimport {getCases} from \"../../../services/api/connectCase\";\r\nimport {IConnectCase} from \"../../../interfaces/IConnectCase\";\r\nimport moment from 'moment';\r\nimport {IDevice} from \"../../../shared/interfaces/IDevice\";\r\nimport { getMemberSerialNumbers } from \"../../../services/deviceService\";\r\nimport classes from './PracticeCases.module.scss';\r\n\r\nimport { ClickAwayListener } from \"@mui/base\";\r\nimport EditCalendarIcon from \"@mui/icons-material/EditCalendar\";\r\n\r\nimport { DateRangePicker } from \"react-date-range\";\r\nimport \"react-date-range/dist/styles.css\";\r\nimport \"react-date-range/dist/theme/default.css\";\r\nimport Stack from '@mui/material/Stack';\r\nimport Chip from '@mui/material/Chip';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\n\r\n \r\n\r\ninterface IProps {\r\n type: string;\r\n}\r\n\r\ninterface IWeek {\r\n firstDay: string,\r\n week: number,\r\n downloadedCases: number,\r\n distinctDevicesCount: number\r\n}\r\n\r\nexport default function PracticeCases(props: IProps) {\r\n const { type } = props;\r\n const {t} = useTranslation();\r\n const [calendarVisible, setCalendarVisible] = React.useState(false);\r\n const [allUserDevices, setAllUserDevices] = React.useState([]);\r\n const [userDevices, setUserDevices] = React.useState([]);\r\n const [devicesStats, setDevicesStats] = React.useState([]);\r\n const [membersList, setMembersList] = React.useState([]);\r\n const [activeMembers, setActiveMembers] = React.useState([]);\r\n\r\n let currentRange = {\r\n startDate: moment().startOf(\"month\").toDate(),\r\n endDate: moment().endOf(\"month\").toDate(),\r\n displayedStartDate: moment().startOf(\"month\").format(\"yyyy-MM-DD\"),\r\n displayedEndDate: moment().endOf(\"month\").format(\"yyyy-MM-DD\"),\r\n key: \"selection\",\r\n };\r\n\r\n let localDateRange = sessionStorage.getItem(\"x-fleet-dashboard-range\");\r\n if(!localDateRange) {\r\n localDateRange = JSON.stringify(currentRange);\r\n sessionStorage.setItem(\"x-fleet-dashboard-range\", localDateRange);\r\n } else {\r\n currentRange = JSON.parse(localDateRange);\r\n currentRange.startDate = moment(currentRange.startDate).toDate();\r\n currentRange.endDate = moment(currentRange.endDate).toDate();\r\n }\r\n \r\n const [currentDateRange, setDateRange] = React.useState(currentRange);\r\n\r\n\r\n const [isLoading, setLoading] = React.useState(false);\r\n const [weeksRange, setWeeksRange] = React.useState([]);\r\n\r\n const toggleCalendar = () => {\r\n setCalendarVisible(!calendarVisible);\r\n }\r\n\r\n const saveMembersList = (devices: IDevice[])=> {\r\n const members = devices.map((d: IDevice) => d.deviceConfiguration.member);\r\n const uniqueMembers = [...new Map(members.map(v => [v.recordId, v])).values()];\r\n setMembersList(uniqueMembers);\r\n setActiveMembers([...uniqueMembers.map(m => m.recordId)]); \r\n }\r\n\r\n const getDeviceCasesCount = (cases:IConnectCase[], sn:string, weekNumber: number|null) => {\r\n const list = cases.filter(c => c.deviceSN == sn && (c.weekNumber == weekNumber || weekNumber === null));\r\n return list ? list.length : 0;\r\n }\r\n\r\n const getWeeklyDownloadedCases = (cases:IConnectCase[], weekNumber: number) => {\r\n const list = cases.filter(c => c.downloadWeekNumber == weekNumber);\r\n return list ? list.length : 0;\r\n }\r\n\r\n const getWeeklyDevicesDownloadedCases = (cases:IConnectCase[], weekNumber: number) => {\r\n const list = cases.filter(c => c.downloadWeekNumber == weekNumber)\r\n .map(c => c.deviceSN);\r\n const devices = list.filter((n, i) => list.indexOf(n) === i);\r\n return devices && devices.length > 0 ? devices.length : 0;\r\n }\r\n\r\n const handleDateChange = (ranges: any) => {\r\n \r\n const range = {\r\n startDate: ranges.selection.startDate,\r\n endDate: ranges.selection.endDate,\r\n displayedStartDate: moment(ranges.selection.startDate).format(\"yyyy-MM-DD\"),\r\n displayedEndDate: moment(ranges.selection.endDate).format(\"yyyy-MM-DD\"),\r\n key: \"selection\",\r\n };\r\n sessionStorage.setItem(\"x-fleet-dashboard-range\", JSON.stringify(range));\r\n\r\n setDateRange(range);\r\n };\r\n\r\n const getWeekTotal = (week:number) => {\r\n let total = 0;\r\n userDevices.forEach(d => {\r\n total += d[`count_${week}`];\r\n });\r\n return total;\r\n }\r\n\r\n const getTotalCases = () => {\r\n let total = 0;\r\n userDevices.forEach(d => {\r\n total += d[\"total\"];\r\n });\r\n return total;\r\n }\r\n\r\n const filterCase = (c: IConnectCase) => {\r\n const d = userDevices.filter(d => d.serialNumber === c.deviceSN)[0];\r\n return d && activeMembers.indexOf(d.deviceConfiguration.memberId) >= 0;\r\n }\r\n\r\n const refreshDashboard = async() => {\r\n if(currentDateRange && userDevices) {\r\n\r\n // Get DX IS Connect cases\r\n const res = await getCases(\r\n null, \r\n null, \r\n moment(currentDateRange.startDate).startOf(\"week\").format(\"yyyy-MM-DD\"), \r\n moment(currentDateRange.endDate).endOf(\"week\").format(\"yyyy-MM-DD\")\r\n );\r\n let cases:IConnectCase[] = res.value;\r\n\r\n // filter cases list\r\n cases = cases.filter(c => filterCase(c));\r\n\r\n cases.map(c => {\r\n c.weekNumber = moment(new Date(c.sentDate)).week();\r\n c.downloadWeekNumber = moment(new Date(c.downloadDate)).week();\r\n });\r\n\r\n // Add cases info to devices list\r\n let w:IWeek[] = [];\r\n const m_startDate = moment(currentDateRange.startDate);\r\n let currentDate = m_startDate.startOf('week');\r\n let list = [...userDevices];\r\n while(currentDate < moment(currentDateRange.endDate)) {\r\n // Add current week\r\n w.push({\r\n firstDay: currentDate.format(\"yyyy-MM-DD\"),\r\n week: currentDate.week(),\r\n downloadedCases: getWeeklyDownloadedCases(cases, currentDate.week()),\r\n distinctDevicesCount: getWeeklyDevicesDownloadedCases(cases, currentDate.week())\r\n });\r\n\r\n list.map(d => {\r\n d[`week_${currentDate.week()}`] = currentDate.week();\r\n d[`firstDay_${currentDate.week()}`] = currentDate;\r\n d[`count_${currentDate.week()}`] = getDeviceCasesCount(cases, d.serialNumber, currentDate.week());\r\n });\r\n\r\n // Add week to current date\r\n currentDate = currentDate.add(1, \"week\");\r\n }\r\n // Add total cases per device\r\n list.map(d => {\r\n d[\"total\"] = getDeviceCasesCount(cases, d.serialNumber, null);\r\n });\r\n\r\n setWeeksRange(w);\r\n setDevicesStats(list);\r\n }\r\n }\r\n\r\n const handleMemberClick = (memberId: string) => {\r\n if (activeMembers.indexOf(memberId) < 0) {\r\n const list = [...activeMembers, ...[memberId] ];\r\n setActiveMembers(list);\r\n\r\n // Refresh userDevices\r\n refreshDevicesList(list)\r\n }\r\n }\r\n\r\n const handleMemberDelete = (memberId: string) => {\r\n const members = activeMembers.filter((m) => m !== memberId);\r\n setActiveMembers(members);\r\n // Refresh userDevices\r\n refreshDevicesList(members)\r\n }\r\n\r\n const refreshDevicesList = (members: string[]) => {\r\n const list = allUserDevices.filter(d => members.indexOf(d.deviceConfiguration.memberId) >= 0);\r\n setUserDevices(list);\r\n }\r\n\r\n const isActiveMember = (memberId: string) => {\r\n const members = activeMembers.filter((m) => m === memberId);\r\n return members && members.length > 0;\r\n }\r\n\r\n React.useEffect(() => {\r\n // Update cases list for new selected range\r\n refreshDashboard();\r\n }, [currentDateRange, userDevices]);\r\n\r\n React.useEffect(() => {\r\n // Get current user's devices\r\n const fetchUserDevices =async () => {\r\n const data = await getMemberSerialNumbers();\r\n saveMembersList(data);\r\n setUserDevices(data);\r\n setAllUserDevices(data);\r\n }\r\n fetchUserDevices(); \r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n

Fleet Cases from {currentDateRange?.displayedStartDate} to {currentDateRange?.displayedEndDate}

\r\n\r\n setCalendarVisible(false)}>\r\n
\r\n \r\n\r\n
\r\n {calendarVisible === true && (\r\n
\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n
\r\n \r\n {\r\n membersList.map((member: IMember, index: number) => {\r\n return (\r\n handleMemberClick(member.recordId)}\r\n onDelete={() => handleMemberDelete(member.recordId)}\r\n deleteIcon={}\r\n />\r\n )\r\n })\r\n }\r\n \r\n
\r\n \r\n

{t(\"Weekly submitted cases\")}

\r\n \r\n \r\n \r\n \r\n {t('Practice Name')}\r\n {t('Serial number')}\r\n {t('State')}\r\n {t('City')}\r\n {\r\n weeksRange.map((week: IWeek, index: number) => (\r\n {`Week ${week.week} (${week.firstDay})`}\r\n ))\r\n }\r\n {t('Total')}\r\n \r\n \r\n \r\n {devicesStats.map((row: IDevice, index: number) => (\r\n \r\n {row.deviceConfiguration?.practice?.name}\r\n {row.serialNumber}\r\n {row.deviceConfiguration?.practice?.address?.region}\r\n {row.deviceConfiguration?.practice?.address?.city}\r\n {\r\n weeksRange.map((week: IWeek, index: number) => (\r\n {row[`count_${week.week}`]}\r\n ))\r\n }\r\n {row.total}\r\n \r\n ))}\r\n\r\n \r\n Total\r\n \r\n \r\n \r\n {\r\n weeksRange.map((week: IWeek, index: number) => (\r\n {getWeekTotal(week.week)}\r\n ))\r\n }\r\n {getTotalCases()}\r\n \r\n \r\n
\r\n
\r\n\r\n

{t(\"Weekly downloaded cases\")}

\r\n
\r\n \r\n \r\n \r\n } />\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n

{t(\"Active Scanners: Weekly distinct count of devices having downloaded cases\")}

\r\n
\r\n \r\n \r\n {/* */}\r\n } />\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nfunction CustomizedAxisLabel(props: any) {\r\n \r\n const { x, y, stroke, payload } = props;\r\n return (\r\n \r\n \r\n {moment(payload.value).format(\"MMMM DD, yyyy\")}\r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { BarChart, Bar, ScatterChart, Scatter, PieChart, Pie, Cell, Sector, XAxis, YAxis, ZAxis, CartesianGrid, Tooltip, ResponsiveContainer, LabelList } from 'recharts';\r\nimport { useTranslation } from 'react-i18next';\r\nimport {getCases} from \"../../../services/api/connectCase\";\r\nimport {IConnectCase} from \"../../../interfaces/IConnectCase\";\r\nimport moment from 'moment';\r\nimport {IDevice} from \"../../../shared/interfaces/IDevice\";\r\nimport { getMemberSerialNumbers } from \"../../../services/deviceService\";\r\nimport classes from './dashboard.module.scss';\r\n\r\nimport { ClickAwayListener } from \"@mui/base\";\r\nimport EditCalendarIcon from \"@mui/icons-material/EditCalendar\";\r\n\r\nimport { DateRangePicker } from \"react-date-range\";\r\nimport \"react-date-range/dist/styles.css\";\r\nimport \"react-date-range/dist/theme/default.css\";\r\nimport Stack from '@mui/material/Stack';\r\nimport Chip from '@mui/material/Chip';\r\nimport DeleteIcon from '@mui/icons-material/Delete';\r\nimport IMember from \"../../../interfaces/IMember\";\r\n\r\ninterface IProps {\r\n type: string;\r\n}\r\n\r\ninterface IDeviceCases {\r\n device: string,\r\n count: number\r\n}\r\n\r\ninterface IDeviceLabCases {\r\n device: string,\r\n laboratory: string,\r\n count: number\r\n}\r\n\r\ninterface ILabCases {\r\n laboratory: string,\r\n count: number\r\n}\r\n\r\nexport default function Dashboard(props: IProps) {\r\n const {t} = useTranslation();\r\n const [calendarVisible, setCalendarVisible] = React.useState(false);\r\n const [allUserDevices, setAllUserDevices] = React.useState([]);\r\n const [userDevices, setUserDevices] = React.useState([]);\r\n const [membersList, setMembersList] = React.useState([]);\r\n const [activeMembers, setActiveMembers] = React.useState([]);\r\n const [devicesCases, setDevicesCases] = React.useState([]);\r\n const [labsCases, setLabsCases] = React.useState([]);\r\n const [deviceLabCases, setDeviceLabCases] = React.useState([]);\r\n const [indicationCases, setIndicationCases] = React.useState([]);\r\n const [pieActiveIndex, setPieActiveIndex] = React.useState(0);\r\n \r\n\r\n let currentRange = {\r\n startDate: moment().startOf(\"month\").toDate(),\r\n endDate: moment().endOf(\"month\").toDate(),\r\n displayedStartDate: moment().startOf(\"month\").format(\"yyyy-MM-DD\"),\r\n displayedEndDate: moment().endOf(\"month\").format(\"yyyy-MM-DD\"),\r\n key: \"selection\",\r\n };\r\n\r\n let localDateRange = sessionStorage.getItem(\"x-fleet-dashboard-range\");\r\n if(!localDateRange) {\r\n localDateRange = JSON.stringify(currentRange);\r\n sessionStorage.setItem(\"x-fleet-dashboard-range\", localDateRange);\r\n } else {\r\n currentRange = JSON.parse(localDateRange);\r\n currentRange.startDate = moment(currentRange.startDate).toDate();\r\n currentRange.endDate = moment(currentRange.endDate).toDate();\r\n }\r\n \r\n const [currentDateRange, setDateRange] = React.useState(currentRange);\r\n\r\n const toggleCalendar = () => {\r\n setCalendarVisible(!calendarVisible);\r\n }\r\n\r\n const saveMembersList = (devices: IDevice[])=> {\r\n const members = devices.map((d: IDevice) => d.deviceConfiguration.member);\r\n const uniqueMembers = [...new Map(members.map(v => [v.recordId, v])).values()];\r\n setMembersList(uniqueMembers);\r\n setActiveMembers(uniqueMembers.map(m => m.recordId)); \r\n }\r\n\r\n const handleDateChange = (ranges: any) => {\r\n \r\n const range = {\r\n startDate: ranges.selection.startDate,\r\n endDate: ranges.selection.endDate,\r\n displayedStartDate: moment(ranges.selection.startDate).format(\"yyyy-MM-DD\"),\r\n displayedEndDate: moment(ranges.selection.endDate).format(\"yyyy-MM-DD\"),\r\n key: \"selection\",\r\n };\r\n sessionStorage.setItem(\"x-fleet-dashboard-range\", JSON.stringify(range));\r\n\r\n setDateRange(range);\r\n };\r\n\r\n const filterCase = (c: IConnectCase) => {\r\n const d = userDevices.filter(d => d.serialNumber === c.deviceSN)[0];\r\n return d && activeMembers.indexOf(d.deviceConfiguration.memberId) >= 0;\r\n }\r\n\r\n const refreshDashboard = async() => {\r\n if(currentDateRange && userDevices) {\r\n\r\n // Get DX IS Connect cases\r\n const res = await getCases(\r\n null, \r\n null, \r\n moment(currentDateRange.startDate).startOf(\"week\").format(\"yyyy-MM-DD\"), \r\n moment(currentDateRange.endDate).endOf(\"week\").format(\"yyyy-MM-DD\")\r\n );\r\n let cases:IConnectCase[] = res.value;\r\n\r\n // filter cases list\r\n cases = cases.filter(c => filterCase(c));\r\n\r\n // Build cases lists\r\n let devices: IDeviceCases[] = [];\r\n // Add total cases per device\r\n userDevices.map(d => {\r\n devices.push({\r\n device: d.deviceConfiguration?.practice?.name ? `${d.serialNumber}-${d.deviceConfiguration?.practice?.name}` : d.serialNumber,\r\n // device: `${d.serialNumber}`,\r\n count: (cases.filter(c => c.deviceSN === d.serialNumber)).length\r\n })\r\n });\r\n // Sort list\r\n devices.sort((a, b) => (a.count > b.count ? -1 : 1));\r\n setDevicesCases(devices);\r\n\r\n // Build labs cases\r\n const names = [...new Set(cases.map(c => c.laboratoryName))];\r\n let labs: ILabCases[] = [];\r\n names.map(l => {\r\n labs.push({\r\n laboratory: l,\r\n count: (cases.filter(c => c.laboratoryName === l)).length\r\n })\r\n });\r\n // Sort list\r\n labs.sort((a, b) => (a.count > b.count ? -1 : 1));\r\n setLabsCases(labs);\r\n\r\n // Set Device lab cases\r\n let scatter: IDeviceLabCases[] = [];\r\n userDevices.map(d => {\r\n names.map(l => {\r\n const t = (cases.filter(c => c.laboratoryName === l && c.deviceSN === d.serialNumber)).length;\r\n if (t > 0) {\r\n let prac = d.deviceConfiguration?.practice?.name;\r\n if (!prac) {\r\n const addrName = (cases.filter(c => c.deviceSN === d.serialNumber))[0][\"addressName\"];\r\n prac = addrName ? `(${addrName})` : \"\";\r\n }\r\n\r\n scatter.push({\r\n device: prac ? `${d.serialNumber}-${prac}` : d.serialNumber,\r\n // device: d.serialNumber,\r\n laboratory: l,\r\n count: t\r\n });\r\n }\r\n })\r\n });\r\n setDeviceLabCases(scatter);\r\n\r\n // Cases per indication\r\n let indications = cases.map(c => {return c.caseType;});\r\n const userIndications = [...new Set(indications)];\r\n const indCases = userIndications.map(i => {\r\n return {\r\n indication: i,\r\n total: (cases.filter(c => c.caseType === i)).length\r\n }\r\n });\r\n setIndicationCases(indCases);\r\n }\r\n }\r\n\r\n const handleMemberClick = (memberId: string) => {\r\n if (activeMembers.indexOf(memberId) < 0) {\r\n const list = [...activeMembers, ...[memberId] ];\r\n setActiveMembers(list);\r\n\r\n // Refresh userDevices\r\n refreshDevicesList(list)\r\n }\r\n }\r\n\r\n const handleMemberDelete = (memberId: string) => {\r\n const members = activeMembers.filter((m) => m !== memberId);\r\n setActiveMembers(members);\r\n // Refresh userDevices\r\n refreshDevicesList(members)\r\n }\r\n\r\n const refreshDevicesList = (members: string[]) => {\r\n const list = allUserDevices.filter(d => members.indexOf(d.deviceConfiguration.memberId) >= 0);\r\n setUserDevices(list);\r\n }\r\n\r\n const isActiveMember = (memberId: string) => {\r\n const members = activeMembers.filter((m) => m === memberId);\r\n return members && members.length > 0;\r\n }\r\n const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#e815c1'];\r\n\r\n const onPieEnter = (_: any, index: number) => {\r\n setPieActiveIndex(index);\r\n };\r\n\r\n React.useEffect(() => {\r\n // Update cases list for new selected range\r\n refreshDashboard();\r\n }, [currentDateRange, userDevices]);\r\n\r\n React.useEffect(() => {\r\n // Get current user's devices\r\n const fetchUserDevices =async () => {\r\n const data = await getMemberSerialNumbers();\r\n saveMembersList(data);\r\n setUserDevices(data);\r\n setAllUserDevices(data);\r\n }\r\n fetchUserDevices(); \r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n

{t(\"Cases overview from\")} {currentDateRange?.displayedStartDate} {t(\"to\")} {currentDateRange?.displayedEndDate}

\r\n\r\n setCalendarVisible(false)}>\r\n
\r\n \r\n\r\n
\r\n {calendarVisible === true && (\r\n
\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n
\r\n \r\n {\r\n membersList.map((member: IMember, index: number) => {\r\n return (\r\n handleMemberClick(member.recordId)}\r\n onDelete={() => handleMemberDelete(member.recordId)}\r\n deleteIcon={}\r\n />\r\n )\r\n })\r\n }\r\n \r\n
\r\n\r\n

{t(\"Case total by device\")}

\r\n
\r\n \r\n \r\n \r\n \r\n } />\r\n \r\n {/* */}\r\n \r\n \r\n \r\n
\r\n\r\n

{t(\"Case total by lab\")}

\r\n
\r\n \r\n \r\n \r\n \r\n } />\r\n \r\n {/* */}\r\n \r\n \r\n \r\n
\r\n\r\n

{t(\"Practice - Lab\")}

\r\n
\r\n \r\n \r\n \r\n } />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n

{t(\"Case total by indication\")}

\r\n
\r\n \r\n \r\n \r\n {indicationCases.map((entry, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nfunction CustomizedAxisLabel(props: any) { \r\n const { x, y, stroke, payload } = props;\r\n return (\r\n \r\n \r\n {payload.value}\r\n \r\n \r\n );\r\n}\r\n\r\nfunction ObliqueAxisLabel(props: any) { \r\n const { x, y, stroke, payload } = props;\r\n return (\r\n \r\n \r\n {payload.value}\r\n \r\n \r\n );\r\n}\r\n\r\nfunction renderActiveShape(props: any) {\r\n const RADIAN = Math.PI / 180;\r\n const { cx, cy, midAngle, innerRadius, outerRadius, startAngle, endAngle, fill, payload, percent, value, indication } = props;\r\n const sin = Math.sin(-RADIAN * midAngle);\r\n const cos = Math.cos(-RADIAN * midAngle);\r\n const sx = cx + (outerRadius + 10) * cos;\r\n const sy = cy + (outerRadius + 10) * sin;\r\n const mx = cx + (outerRadius + 30) * cos;\r\n const my = cy + (outerRadius + 30) * sin;\r\n const ex = mx + (cos >= 0 ? 1 : -1) * 22;\r\n const ey = my;\r\n const textAnchor = cos >= 0 ? 'start' : 'end';\r\n\r\n return (\r\n \r\n \r\n {payload.name}\r\n \r\n \r\n \r\n \r\n \r\n = 0 ? 1 : -1) * 12} y={ey} textAnchor={textAnchor} fill=\"#333\">{`${indication}: ${value}`}\r\n = 0 ? 1 : -1) * 12} y={ey} dy={18} textAnchor={textAnchor} fill=\"#999\">\r\n {`(${(percent * 100).toFixed(2)}%)`}\r\n \r\n \r\n );\r\n};\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport Tabs from \"@mui/material/Tabs\";\r\nimport Tab from \"@mui/material/Tab\";\r\nimport Box from \"@mui/material/Box\";\r\nimport deviceList from \"../../assets/images/home/device-list.svg\";\r\nimport deviceListWhite from \"../../assets/images/home/device-list-white.svg\";\r\nimport memberConf from \"../../assets/images/home/member-configuration.svg\";\r\nimport memberConfWhite from \"../../assets/images/home/member-configuration-white.svg\";\r\nimport userDetails from \"../../assets/images/home/user-details.svg\";\r\nimport userDetailsWhite from \"../../assets/images/home/user-details-white.svg\";\r\nimport help from \"../../assets/images/help.svg\";\r\nimport \"./VerticalMenu.scss\";\r\nimport Button from \"@mui/material/Button\";\r\nimport Divider from \"@mui/material/Divider\";\r\nimport { configContext } from \"../../shared/useAppConfig\";\r\nimport { AppType } from \"../../shared/enums/AppType\";\r\nimport useAuthService from \"../../services/authService\";\r\nimport UsersFlpConf from \"../UserConfFlp\";\r\nimport Members from \"../MemberConf/Members\";\r\nimport ExchangeLabList from \"../MemberConf/ExchangeLabConf\";\r\nimport { UserRole } from \"../../shared/enums/UserRole\";\r\nimport AdminQuickConnectPartners from \"../MemberConf/QuickConnectPartners/AdminQuickConnectPartners\";\r\nimport MemberQuickConnectPartners from \"../MemberConf/QuickConnectPartners/MemberQuickConnectPartners\";\r\nimport AssessmentOutlinedIcon from '@mui/icons-material/AssessmentOutlined';\r\n\r\nimport { Practice, Device } from '../../page';\r\nimport { useTranslation } from 'react-i18next'; \r\nimport CasesList from \"../MemberConf/CasesList\";\r\nimport PracticeCases from \"../MemberConf/PracticeCases\";\r\nimport Dashboard from \"../MemberConf/Dashboard\";\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode;\r\n index: any;\r\n value: any;\r\n}\r\n\r\nfunction TabPanel(props: TabPanelProps) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n