{"version":3,"sources":["vspace/lists_use.tsx","vspace/list_operatingEntities.tsx","components/utils/oauth/authspa.tsx","components/utils/encodeQueryData.tsx","components/utils/oauth/catchtoken.tsx","components/utils/isjson.tsx","components/utils/oauth/checkToken.tsx","components/utils/oauth/calculateTokenTime.tsx","components/utils/oauth/oauth.tsx","components/utils/oauth/tokenParse.tsx","components/main/main.tsx","components/modalWrapper/modalWrapper.tsx","components/navbar/navbar.tsx","components/textArea/textArea.tsx","components/widget/widget.tsx","components/maps/iconClusterLayer.tsx","components/utils/localstorage.tsx","components/maps/maps.tsx","components/widget/widget_text.tsx","commanderapi/util_encodequerydata.ts","commanderapi/userpreference.ts","commanderapi/theming.ts","commanderapi/authorization.ts","commanderapi/accountManager.ts","commanderapi/dapi.ts","commanderapi/policyServer.ts","commanderapi/main.ts","components/account/profile.tsx","components/account/users.tsx","components/account/entityAccess.tsx","components/account/entityAccessGroups.tsx","vspace/api.ts","vspace/page.tsx","vspace/vspace_history.tsx","vspace/vspace_historyMostRecent.tsx","vspace/vspace_calculations.tsx","vspace/vspace_grid.tsx","common/api_mapbox.tsx","vspace/vspace_gridstyles.tsx","components/widget/formatCurrency.tsx","vspace/vspace_siteview.tsx","vspace/filterCriteria.tsx","vspace/vspace_main.tsx","components/wrapper/darkModeToggle.tsx","components/wrapper/themeSelector.tsx","components/utils/avatarname.tsx","components/wrapper/wrapper.tsx","vspace/getInitialData.tsx","App.tsx","index.tsx","vspace/countries.tsx"],"names":["AllowedUses","listOfOperatingEntities","allowedOperatingEntities","concat","Countries","map","c","name","authSPA","authentication","options","localStorage","removeItem","client_id","scope","server","prompt","payload","response_type","redirect_uri","URL","window","location","origin","toString","state","JSON","stringify","pathname","search","replace","data","ret","key","push","encodeURIComponent","join","encodeQueryData","catchToken","hash","includes","decoded","slice","split","unescape","error","Error","token","expires","Date","setTime","getTime","parseInt","expires_in","toISOString","setItem","parse","uri","console","log","isJson","something","err","checkToken","tokenInput","localStorageTokenString","getItem","calculateTokenTime","OAuth","componentDidUpdate","newtoken","undefined","props","appsettings","clientId","authenticationServer","hasValidToken","onAuth","authorization","token_type","access_token","setState","loadingStyle","height","this","children","Paper","sx","LinearProgress","React","Component","getDecodedToken","parsed","jwt_decode","Main","innerHeight","darkMode","localStateKey","componentDidMount","loadMainState","lastState","newState","open","addEventListener","handleResizeChanges","componentWillUnmount","removeEventListener","toggle","handleDarkModeChanges","e","matches","auth","Box","display","CssBaseline","component","flexGrow","alert","clusterIconMapping","IconClusterLayer","changeFlags","somethingChanged","oldProps","rebuildIndex","dataChanged","sizeScale","index","Supercluster","maxZoom","radius","Math","sqrt","load","d","geometry","coordinates","getPosition","properties","z","floor","context","viewport","zoom","getClusters","info","mode","pickedObject","object","cluster","objects","getLeaves","cluster_id","f","iconAtlas","iconMapping","IconLayer","getSubLayerProps","id","getIcon","size","point_count","getSize","min","CompositeLayer","localStorageSetBoolean","value","localStorageGetBoolean","defaultValue","readValue","DeckGL","lazy","isLatitude","num","isFinite","abs","isLongitude","Maps","showCluster","mapStyleToggle","hoverInfo","initialViewState","viewState","loadMapSettings","goToNewLocation","x","y","className","style","left","top","position","p","pl","pr","instanceName","listOfNodes","CircularProgress","StaticMapR","StaticMap","layer","pickable","onHover","marker","width","mask","selected","picked","FormControlLabel","control","Switch","checked","onChange","label","overflow","flex","fallback","ref","el","longitude","latitude","pitch","bearing","onClick","disabled","ob","coordinate","getCursor","isHovering","isDragging","onViewStateChange","WebMercatorViewport","nwTemp","unproject","seTemp","nw","se","output","bounds","controller","layers","mapStyle","attributionControl","mapboxApiAccessToken","renderTooltip","WidgetText","origValue","componentWillReceiveProps","nextProps","onChangeValue","target","type","parseFloat","renderValue","Typography","color","unit","opacity","valueOptions","Select","MenuItem","u","TextField","helperText","elevation","background","variant","title","APIIoTnxtUserPreferenceAPIServiceAPIs","rest_get_v1default_view","fetch","baseUrl","nodeapisettings","NodeSettings","TenantUrlName","method","headers","then","res","json","rest_get_v1themes","rest_post_v1themes_themeId_","params","body","rest_get_v1favorite_apps","rest_post_v1favorite_apps_appId_","rest_delete_v1favorite_apps_appId_","rest_get_v1recent_apps","rest_post_v1recent_apps_appId","defaultView","get","themes","favoriteApps","recentApps","APIIoTnxtThemingServiceAPIs","rest_get_v1alarm_priority_sounds","rest_put_v1logo_config","rest_get_v1logo_config","rest_get_v1logo_config_mode_","rest_post_v1themes","rest_get_v1themes_id","rest_patch_v1themes_id_disable","rest_patch_v1themes_id_enable","rest_post_v1themesaccountdefault","rest_delete_v1themesaccountdefault","rest_get_v1themes_themeId_load","rest_put_v1themes_themeId_","rest_delete_v1themes_themeId_","rest_post_v1themesshared","api","alarmPrioritySounds","logoConfig","getById","account","default","APIIoTnxtAuthorizationAPIs","get_authorization_profile","get_authorization_profile_accounts","get_authorization_roles","get_user_groups","get_users","profile","accounts","roles","userGroups","users","APIIoTnxtAccountManagerAPIs","owners","members","APIIoTnxtDAPIAPIs","CommanderConfig","GetDynamicConfig","EntityAccessGroup","GetList","EntityAccess","GetPathAccess","GetEntityAccessGroups","EntityTree","GetAccountChildren","TreeBaseEntity","GetChildren","APIIoTnxtPolicyServerAPIs","userid","groups","APIIoTnxtMain","userpreferences","theming","accountManager","dapi","policyServer","path","ProfileDisplay","getDataAsync","iotnxtAPI","config","nodesettings","iotnxtAPIRobot","baseUrlRobot","Promise","all","username","r","result","entityAccessGroups","m","flexDirection","mt","Button","href","DashboardUrl","pt","fontSize","userType","firstName","lastName","email","isEmailVerified","Chip","mr","mb","groupid","groupDisplayName","filter","g","forEach","displayName","applications","length","LicenseInfo","setLicenseKey","UsersDisplay","rows","accountType","o","user","entityResult","DataGridPro","density","pageSize","columns","field","headerName","renderCell","IconButton","row","LinkRounded","EntityAccessDisplay","entityList","DigitwinClientOptions","DefaultParentId","recursive","entityAccessGroup","entityAccessGetPathAccess","getEntityPathAccessByEntityId","entityId","find","a","endsWith","RichObjectTreeView","TreeView","defaultCollapseIcon","defaultExpanded","defaultExpandIcon","overflowY","renderTree","nodes","parentGrant","pathaccess","grant","StyledTreeItem","nodeId","CheckBoxRounded","CheckBoxOutlineBlankRounded","entityType","Array","isArray","node","startIcon","maxHeight","generateTree","Skeleton","list","parentId","tree","TransitionComponent","useSpring","from","transform","to","in","div","Collapse","styled","TreeItem","theme","treeItemClasses","iconContainer","group","marginLeft","paddingLeft","borderLeft","alpha","palette","text","primary","EntityAccessGroupsPage","APIVodafoneVSpacesAPI","rest_get_apiAppSettingsGet","rest_post_apiv1VSpacesDigitwinUploadCsv","rest_post_apiv1VSpacesDigitwinGetPagedCsvInstances","rest_put_apiv1VSpacesDigitwinApproveCsvInstance","rest_delete_apiv1VSpacesDigitwinRemoveCsvInstance","rest_put_apiv1VSpacesDigitwinApproveDraftCsvInstances","rest_delete_apiv1VSpacesDigitwinRemoveErrorCsvInstances","rest_get_apiv1VSpacesDigitwinGetInstance","rest_post_apiv1VSpacesDigitwinGetPagedDigitwinInstances","query","rest_post_apiv1VSpacesDigitwinAddOrUpdateInstance","rest_post_apiv1VSpacesDigitwinAddOrUpdateManyInstances","rest_post_apiv1VSpacesDigitwinRemoveInstance","rest_post_apiv1VSpacesDigitwinGetPagedUpdateHistory","rest_get_apiv1VSpacesDigitwinGetUpdateHistory","rest_get_apiv1VSpacesFrontendGetJsonProperties","rest_get_apiv1VSpacesFrontendGetThemeProperties","rest_get_apiv1VSpacesFrontendGetUserCustomData","rest_post_apiv1VSpacesFrontendSetUserCustomData","AppSettings","Get","v1","VSpacesDigitwin","UploadCsv","GetPagedCsvInstances","ApproveCsvInstance","RemoveCsvInstance","ApproveDraftCsvInstances","RemoveErrorCsvInstances","GetInstance","GetPagedDigitwinInstances","AddOrUpdateInstance","AddOrUpdateManyInstances","RemoveInstance","GetPagedUpdateHistory","GetUpdateHistory","VSpacesFrontend","GetJsonProperties","GetThemeProperties","GetUserCustomData","SetUserCustomData","PageView","caption","document","backButton","RouterLink","ArrowBackTwoTone","Divider","ml","orientation","toUpperCase","header","pleaseWait","Alert","severity","lastResponses","i","isSuccessful","exceptionMessage","message","VSpaceHistory","timestampFormat","historyResponse","instanceId","item","only","renderComponent","FormGroup","defaultChecked","timestamp","sortModel","sort","renderHeader","GridActionsCellItem","icon","UndoTwoTone","historyItem","response","moment","fromNow","HumanReadableHistoryDiff","VSpaceHistoryRoute","useParams","mostrecent","simplified","action","description","Object","keys","prop","VSpaceHistoryMostRecent","HumanReadableHistoryDiffWithDetails","use","processInstanceCalculations","assignedUsers","utilizedArea","utilityCost","estateCost","facilitiesHardCost","facilitiesSoftCost","calculatedAreaRequiredToMeetGroupTarget","calculatedTotalCost","calculatedCostPerSQM","isNaN","costGroupTarget","calculatedCostOfSurplusAreaPA","removeCalculations","tempcopy","cacheInsertedDate","cacheItemState","cacheLastUpdatedDate","isDataDifferent","incoming","existing","foundDifference","k","ExportXLSX","ImportXLSX","VSpaceGrid","useState","alertDisplay","setAlertDisplay","apiRef","useGridApiRef","setSortModel","items","columnField","operatorValue","linkOperator","GridLinkOperator","Or","filterModel","setFilterModel","handleEditClick","event","stopPropagation","current","startRowEditMode","handleCloneClick","getRow","newRow","_","clone","randomId","isNew","templateName","templateNameHardcoded","updateRows","handleSaveClick","stopRowEditMode","handleDeleteClick","processRowDelete","_action","handleCancelClick","ignoreModifications","processRowUpdate","updatedRow","checkPermission","operatingEntity","isAdmin","userPermissionEntities","indexOf","modifieddata","cols","align","hide","cellClassName","getActions","isInEditMode","getRowMode","isEditable","Tooltip","arrow","placement","SaveTwoTone","DeleteTwoTone","AddTwoTone","EditTwoTone","editMode","onFilterModelChange","model","details","onSortModelChange","initialState","pinnedColumns","onRowEditStart","defaultMuiPrevented","onRowEditStop","components","Toolbar","edittoolbarprops","GridToolbarContainer","alignContent","justifyContent","triggerRefresh","RefreshTwoTone","newEntry","setTimeout","scrollToIndexes","rowIndex","setCellFocus","UploadFileTwoTone","onData","importDataWrongColumns","importData","newr","entries","currentRows","getRowModels","preppedData","importedrow","cr","allowedRows","blockedRowCount","addS","processSaveAll","componentsProps","toolbar","experimentalFeatures","newEditingApi","input","count","APIMapBox","geocodeReverse","lookupPlaceName","search_text","geocodeReversePlaceName","features","place_name","gridStyles","formatCurrency","currency","toLocaleString","toFixed","filteredOutFields","VSpaceSiteView","newPurposeText","mapZoom","enableSetLocation","mapboxReverseResult","showDeleteSiteConfirmDialog","editable","getData","animatezoom","zooms","router","onInstanceId","latLong","getLatLong","appState","simplifiedAccessRules","dataOrig","mapLatitude","mapLongitude","addUse","removeUse","getCoordinates","getMapboxLocation","latlng","prepareGridData","unshift","clsx","notEditable","column","w","sortable","toLowerCase","getProperty","fontWeight","newrow","grandTotal","val","b","getTotalCost","reduce","partialSum","getTotalAreaRequiredToMeetGroupTarget","getCostOfSurplusAreaPA","updateValue","update","undoChanges","saveChanges","vspaceapi","dataOrigUses","dataUses","deletedUses","deletedInstances","deleteTasks","deleteResults","instancesToAddOrUpdate","orig","tasks","refresh","wasThereChanges","getListOfUsesCurrentUses","currentlyInUseForPurpose","useToCheck","setLocation","newLocation","setProperty","newValues","onClickRefresh","delay","deleteSite","navigate","propertyName","property","changes","Dialog","onClose","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","HistoryTwoTone","enableMapStyleToggle","mapHoverItem","mapViewState","Grid","container","spacing","xs","city","country","region","Regions","buildingArea","assetId","uniq","code","numberOfBuildings","freeHoldBuildings","getTotalOnProperty","FormControl","InputLabel","labelId","hideFooter","disableColumnReorder","showColumnRightBorder","disableChildrenFiltering","disableChildrenSorting","disableColumnFilter","disableMultipleSelection","disableColumnMenu","disableSelectionOnClick","autoHeight","isCellEditable","isRowSelectable","onCellEditStart","onCellEditCommit","onCellEditStop","VSpaceSiteViewRoute","useLocation","useNavigate","time","resolve","FilterCriteria","getListOfOperatingEntities","isCountryInRegionCode","setRegion","onFilterChange","setCountry","setCityName","setOperatingEntity","setUsePurpose","setInstanceName","renderContent","CloseTwoTone","fullWidth","pb","defaultInitialViewState","VSpaceMainClass","showTable","showOnlyEditable","enableFilterToMapBounds","digitwinInstances","headerClassName","SaveAsTwoTone","LinkTwoTone","textTransform","valueGetter","addResponseMessage","entry","shift","applyFilterCriteria","mapBounds","filterCriteria","regionName","regionCodeToName","toLocaleLowerCase","goToNewFilterCriteriaOnMap","regionGPS","findRegionGPS","countryGps","findCountryGPS","sortInstances","AddOrUpdateInstanceLocal","findIndex","splice","RemoveInstanceLocal","element","renderMain","mapClickedEvent","instance","prepItem","chunks","chunk","VSpaceMain","DarkModeToggle","displayMode","ToggleButtonGroup","exclusive","checkSystemDarkMode","ToggleButton","Brightness5TwoTone","SettingsBrightnessTwoTone","Brightness7TwoTone","matchMedia","ThemeSelector","getTheme","activeTheme","activeThemeName","themeData","setTheme","selectedTheme","checkIfColourIsLight","mainContentBackgroundColour","main","widgetContentAccentColour","secondary","rightMenuTabHeaderTextHoverColour","contrastText","mainContentTextColour","paper","landingPageMainContentBackgroundColour","onThemeChange","CheckTwoTone","v","active","ThemePreview","backgroundColor","rgbastring","stringToColor","inputstring","commanderColours","charCodeAt","stringToHash","colourVar","round","borderColor","colour","RouterWrapper","menuOpen","lightTheme","createTheme","darkTheme","ThemeProvider","HomeRounded","editList","entity","cursor","menuAnchor","currentTarget","Avatar","trim","bgcolor","anchorEl","PaperProps","content","right","zIndex","transformOrigin","horizontal","vertical","anchorOrigin","ListItemIcon","AccountCircleRounded","PersonRounded","ScatterPlotRounded","getInitialData","sidType","sid","entityPathAccess","entityAccessGroupData","viewAll","eagd","pathAccess","App","ServiceOptions","AuthenticationServer","webApiUrl","clientUrl","ClientId","fullscreen","ReactDOM","createRoot","getElementById","render","regionCode","countryGPS","countryName"],"mappings":"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","file":"static/js/main.881fef1e.chunk.js","sourcesContent":["export const AllowedUses = [\n \"Retail\",\n \"MSC\",\n \"Office\",\n \"Data Center\",\n \"Call Center\",\n \"Other\"\n];","import { Countries } from \"./countries\";\n\n// then the list of countries gets added underneath.\nexport const listOfOperatingEntities = [\"Automotive\", \"Group\", \"VOIS\"];\n\nexport const allowedOperatingEntities = listOfOperatingEntities.concat(Countries.map(c => c.name));","\nimport { encodeQueryData } from '../encodeQueryData'\n\nexport function authSPA(authentication: {\n scope: string\n client_id: string\n server?: string\n client_secret?: string\n}, options?: { prompt?: string }) {\n\n localStorage.removeItem('token');\n const { client_id, scope, server } = authentication;\n let prompt: any = 'silent';\n if (options) {\n prompt = options.prompt;\n }\n const payload = {\n response_type: \"token\",\n client_id,\n redirect_uri: new URL(\"\", window.location.origin).toString(),\n scope,\n state: JSON.stringify({\n pathname: window.location.pathname,\n search: window.location.search,\n }),\n prompt\n };\n\n window.location.replace(`${server}/auth/connect/authorize?${encodeQueryData(payload)}`);\n}","export function encodeQueryData(data: { [index: string]: string | number }) {\n const ret = [];\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in data) {\n ret.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`);\n }\n return ret.join(\"&\");\n }","import { IToken } from \"./itoken\";\n\nexport function catchToken(): IToken | undefined {\n\n // try to get token from local storage.\n // if (loadToken()) return loadToken();\n\n if (window.location.hash.includes(\"error\")) {\n const decoded: any = {};\n for (const y of window.location.hash.slice(1).split(\"&\")) {\n const c = y.split(\"=\");\n decoded[c[0]] = unescape(c[1]);\n }\n if (decoded.error && decoded.error === \"login_required\") throw new Error(decoded.error);\n }\n\n if (!window.location.hash.includes(\"access_token\")) return;\n\n const decoded: any = {};\n for (const y of window.location.hash.slice(1).split(\"&\")) {\n const c = y.split(\"=\");\n decoded[c[0]] = unescape(c[1]);\n }\n let token: IToken = decoded;\n const expires = new Date();\n expires.setTime(new Date().getTime() + (parseInt(token.expires_in)*100));\n token.expires = expires.toISOString();\n\n // console.log(token);\n localStorage.setItem(\"token\", JSON.stringify(token));\n\n const state = (token.state) ? JSON.parse(token.state) : { pathname: '/', search: ''};\n\n /** redirect */\n const uri = `${state.pathname}${state.search}`;\n console.log(`Redirecting to ${uri}`);\n window.location.replace(uri);\n return token;\n}\n","export function isJson(something: any): boolean {\n try {\n const data = JSON.parse(something);\n if (data) return true\n } catch (err) {\n\n }\n return false;\n}","import { calculateTokenTime } from \"./calculateTokenTime\";\nimport { IToken } from \"./itoken\";\nimport { isJson } from '../isjson'\n\nexport function checkToken(tokenInput?: string | null): IToken | undefined {\n const localStorageTokenString = localStorage.getItem(\"token\");\n if (isJson(localStorageTokenString) && localStorageTokenString !== null) {\n const token = JSON.parse(localStorageTokenString);\n // console.log('token time left:', calculateTokenTime(token));\n if (calculateTokenTime(token) > 0) {\n return token;\n }\n }\n}","import { IToken } from \"./itoken\";\n\nexport function calculateTokenTime(token:IToken) : number {\n if (!token.expires) return 0;\n \n const timeleft = new Date(token.expires).getTime() - new Date().getTime();\n return timeleft;\n};\n","import { Paper } from \"@mui/material\";\nimport LinearProgress from \"@mui/material/LinearProgress\";\nimport React from \"react\";\nimport { INodeSettings } from \"../../../interfaces\";\nimport { checkToken, catchToken, authSPA, IToken } from \"./\";\n\nexport interface IAppSettings {\n authenticationServer: string;\n webApiUrl: string;\n clientUrl: string;\n clientId: string;\n nodeapisettings: INodeSettings\n}\n\nexport interface IOAuthState {\n hasValidToken?: boolean;\n}\n\nexport interface IOAuthProps {\n appsettings?: IAppSettings;\n children?: React.ReactNode;\n onAuth: (auth: { token: IToken; authorization: string }) => void;\n}\n\nexport class OAuth extends React.Component {\n state: IOAuthState = {};\n\n componentDidUpdate = () => {\n let token = checkToken(localStorage.getItem(\"token\"));\n\n if (!token) {\n console.log('could not retrieve valid token.')\n localStorage.removeItem(\"token\");\n }\n\n // if we did get a new token use it.\n const newtoken = (!token) ? catchToken() : undefined;\n if (newtoken) token = newtoken;\n if (this.props.appsettings && !token) {\n authSPA({\n scope: \"role api permissions\",\n client_id: this.props.appsettings.clientId,\n server: this.props.appsettings.authenticationServer,\n });\n }\n\n if (token && !this.state.hasValidToken) {\n this.props.onAuth({\n token,\n authorization: `${token.token_type} ${token.access_token}`,\n });\n this.setState({ hasValidToken: true });\n }\n };\n\n render() {\n let loadingStyle = { height: 2000 }\n if (!this.props.appsettings)\n return (\n \n \n \n );\n if (this.state.hasValidToken) return <>{this.props.children};\n return (\n \n \n \n );\n }\n}\n","import React from \"react\"\nimport { isJson, IToken, ITokenDecoded } from \"..\";\nimport jwt_decode from 'jwt-decode';\n\ninterface ITokenParseState {\n decoded?: ITokenDecoded\n}\n\ninterface ITokenParseProps {\n property?: keyof ITokenDecoded\n component?: (props: ITokenDecoded) => React.ReactNode\n}\n\nexport class TokenParse extends React.Component {\n state: ITokenParseState = {\n decoded: getDecodedToken()\n }\n\n\n render(): JSX.Element {\n if (!this.state.decoded) return <>;\n\n if (this.props.component) {\n let NestedComponent = this.props.component(this.state.decoded);\n // @ts-ignore\n return \n }\n\n if (!this.props.property) return <>error need property;\n\n return <>{this.state.decoded?.[this.props.property] || 'error'}\n }\n}\n\n\n\nexport function getDecodedToken(): ITokenDecoded | undefined {\n const token = localStorage.getItem(\"token\");\n if (token && isJson(token)) {\n const parsed: IToken = JSON.parse(token);\n const decoded: ITokenDecoded = jwt_decode(parsed.access_token)\n return decoded;\n }\n}","import * as React from \"react\";\nimport Box from \"@mui/material/Box\";\nimport CssBaseline from \"@mui/material/CssBaseline\";\nimport { IMainProps, IMainState } from \"./interfaces\";\nimport { Outlet } from \"react-router-dom\";\nimport { isJson } from \"../utils\";\nimport { OAuth } from \"../utils\";\n\n\n\n\nexport class Main extends React.Component {\n state: IMainState = {\n height: window.innerHeight,\n darkMode: true\n };\n\n localStateKey = \"mainStateStorage\";\n\n componentDidMount = async () => {\n\n const loadMainState = await localStorage.getItem(this.localStateKey);\n if (loadMainState && isJson(loadMainState)) {\n let lastState = JSON.parse(loadMainState) as IMainState;\n const newState: Partial = {};\n if (lastState.open !== undefined) newState.open = lastState.open;\n if (lastState.darkMode !== undefined)\n newState.darkMode = lastState.darkMode;\n\n this.setState({ darkMode: newState.darkMode });\n } else {\n this.setState({ open: true }); //default\n }\n\n window.addEventListener(\"resize\", this.handleResizeChanges);\n };\n\n componentWillUnmount = async () => {\n window.removeEventListener(\"resize\", this.handleResizeChanges);\n };\n\n toggle = async () => {\n const newState = { open: !this.state.open };\n this.setState(newState);\n await localStorage.setItem(this.localStateKey, JSON.stringify(newState));\n };\n\n handleDarkModeChanges = (e: MediaQueryListEvent) => {\n this.setState({ darkMode: e.matches });\n };\n\n handleResizeChanges = () => {\n this.setState({ height: window.innerHeight });\n };\n\n\n render(): React.ReactNode {\n\n\n return ( {\n this.props.onAuth(auth);\n }}>\n \n \n \n\n {this.props.alert}\n\n \n \n \n \n );\n }\n}\n","import React from 'react';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { OverridableComponent } from '@mui/material/OverridableComponent';\nimport { SvgIconTypeMap, Tooltip } from '@mui/material';\n\n\n\nexport interface ModalWrapperProps {\n tooltipTitle: string;\n color: \"inherit\" | \"error\" | \"disabled\" | \"action\" | \"primary\" | \"secondary\" | \"info\" | \"success\" | \"warning\" | undefined;\n icon: React.ReactNode,\n theme: any,\n disabled?: boolean,\n dialog?: {\n title: string,\n content?: string,\n },\n /** event when user confirms modal */\n onConfirm: () => void\n /** useful to skip confirm sometimes if its not needed */\n skipConfirm?: boolean\n}\n\nexport interface ModalWrapperState { }\n\nexport class ModalWrapper extends React.Component {\n state = {\n open: false\n }\n\n handleClose = () => {\n this.setState({ open: false });\n }\n\n modal() {\n if (!this.props.dialog) return null;\n\n return (\n\n // \n \n {this.props.dialog.title}\n \n\n {this.props.dialog.content &&\n \n \n {this.props.dialog.content}\n \n \n }\n\n \n \n \n \n \n )\n }\n\n render() {\n\n let Icon = this.props.icon as unknown as OverridableComponent> & { muiName: string; };\n\n return <>\n {this.state.open && this.modal()}\n \n {\n e.cancelable = true;\n e.stopPropagation();\n // @ts-ignore\n // e.stopImmediatePropagation();\n e.preventDefault();\n\n if (this.props.disabled !== true) {\n if (this.props.skipConfirm) {\n this.props.onConfirm();\n return;\n }\n\n this.setState({ open: true });\n }\n\n }} />\n \n }\n}\n","import * as React from \"react\";\nimport Box from \"@mui/material/Box\";\n\nimport IconButton from \"@mui/material/IconButton\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport Toolbar from \"@mui/material/Toolbar\";\nimport { AppBar, Button } from \"@mui/material\";\nimport AccountCircle from \"@mui/icons-material/AccountCircle\";\nimport { Link } from \"react-router-dom\";\n\nexport interface NavBarProps {\n username?: string;\n title: string;\n}\nexport interface NavBarState {\n anchorEl: any;\n mobileMoreAnchorEl: any;\n /** navigate somewhere? */\n to?: string;\n}\n\nexport class NavBar extends React.Component {\n render() {\n return (\n \n \n \n \n \n \n\n \n {this.props.title}\n \n\n \n\n \n \n \n \n \n \n );\n }\n}\n","import React from 'react'\nimport {\n Box,\n Paper,\n TextField,\n Typography\n} from \"@mui/material\";\n\nexport interface ITextAreaProps {\n id?: string\n value: string\n onChange: (value: string) => void\n title?: string\n placeholder?: string\n editMode?: boolean\n}\n\nexport interface ITextAreaState {\n value?: string\n}\n\nexport class TextArea extends React.Component {\n state: ITextAreaState = {};\n\n render() {\n let id = undefined;\n\n if (this.props.title) id = `textarea_${this.props.title?.toLowerCase().split(' ').join('_')}`;\n if (this.props.id) id = this.props.id;\n\n return \n \n \n {this.props.title}\n \n\n {(this.props.editMode === true)\n ? {\n this.props.onChange(e.target.value);\n // this.setState({ value: e.target.value });\n }}\n />\n : {this.props.value}}\n\n \n \n }\n}","import React from 'react';\nimport {\n Typography,\n Switch,\n Stack,\n Card,\n CardContent,\n} from '@mui/material';\n\n// TODO\n// import { Sparkline } from 'mui-plus';\n\nimport { WarningTwoTone } from '@mui/icons-material';\n\nexport interface WidgetProps {\n name?: string,\n label?: string\n data?: number[]\n type?: \"boolean\" | \"number\" | \"string\"\n on?: boolean\n onChange?: (e: any) => void\n busy?: boolean\n schedule?: Schedule\n thresholds?: Threshold[]\n value?: number | boolean | string | undefined | any\n unit?: string\n message?: string\n /** round number values to digit length */\n toFixed?: number\n}\n\nexport interface Schedule {\n on: string\n off: string\n}\n\nexport interface Threshold {\n min: number\n max: number\n level: 'error' | 'warning' | 'info',\n color: 'primary' | 'secondary' | 'error' | 'warning'\n message: string\n}\n\nexport interface WidgetState { }\n\nexport class Widget extends React.Component {\n state: WidgetState = {};\n\n renderMessage() {\n const t = this.checkThresholds();\n\n if (t) {\n return {t.message};\n }\n\n if (this.props.schedule) {\n return {this.props.schedule.on} - {this.props.schedule.off};\n }\n\n if (this.props.message) {\n return (\n \n {this.props.message}\n \n );\n }\n\n return (\n no schedule\n );\n }\n\n checkThresholds() {\n if (!this.props.thresholds) return;\n if (this.props.type !== 'number') return;\n if (this.props.value === undefined) return;\n\n for (var t of this.props.thresholds) {\n if ((t.max > this.props.value) && (\n t.min < this.props.value\n )) {\n return t;\n }\n }\n }\n\n renderValue() {\n const t = this.checkThresholds();\n\n if (this.props.type === 'number') {\n return (\n {this.props.toFixed && typeof this.props.value === 'number' ? this.props.value?.toFixed(this.props.toFixed) : this.props.value}\n {this.props.unit}\n {t?.level === 'warning' && }\n );\n }\n\n if (this.props.type === 'boolean') {\n return (\n {this.props.on ? \"On\" : \"Off\"}\n  {this.props.unit}\n );\n }\n\n if (this.props.type === 'string') {\n return (\n {this.props.value}{this.props.unit}\n );\n }\n\n return type?;\n }\n\n render() {\n if (this.props.busy) {\n return (\n \n \n \n {this.props.label}\n \n\n \n\n \n\n \n connecting\n \n\n \n \n );\n }\n\n return (\n \n \n \n {this.props.label}\n \n\n {(this.props.type === 'boolean' && this.props.onChange) &&\n }\n\n {this.renderValue()}\n {this.renderMessage()}\n\n Sparkline TODO\n\n {/* {this.props.data && } */}\n\n \n \n );\n }\n}\n","import { CompositeLayer } from '@deck.gl/core';\nimport { IconLayer } from '@deck.gl/layers';\nimport Supercluster from 'supercluster';\n\nexport const clusterIconMapping = {\n \"marker-1\": {\n \"x\": 0,\n \"y\": 0,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-2\": {\n \"x\": 128,\n \"y\": 0,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-3\": {\n \"x\": 256,\n \"y\": 0,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-4\": {\n \"x\": 384,\n \"y\": 0,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-5\": {\n \"x\": 0,\n \"y\": 128,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-6\": {\n \"x\": 128,\n \"y\": 128,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-7\": {\n \"x\": 256,\n \"y\": 128,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-8\": {\n \"x\": 384,\n \"y\": 128,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-9\": {\n \"x\": 0,\n \"y\": 256,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-10\": {\n \"x\": 128,\n \"y\": 256,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-20\": {\n \"x\": 256,\n \"y\": 256,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-30\": {\n \"x\": 384,\n \"y\": 256,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-40\": {\n \"x\": 0,\n \"y\": 384,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-50\": {\n \"x\": 128,\n \"y\": 384,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-60\": {\n \"x\": 256,\n \"y\": 384,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-70\": {\n \"x\": 384,\n \"y\": 384,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-80\": {\n \"x\": 0,\n \"y\": 512,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-90\": {\n \"x\": 128,\n \"y\": 512,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker-100\": {\n \"x\": 256,\n \"y\": 512,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n },\n \"marker\": {\n \"x\": 384,\n \"y\": 512,\n \"width\": 128,\n \"height\": 128,\n \"anchorY\": 128\n }\n }\n\nfunction getIconName(size: number) {\n if (size === 0) {\n return '';\n }\n if (size < 10) {\n return `marker-${size}`;\n }\n if (size < 100) {\n return `marker-${Math.floor(size / 10)}0`;\n }\n return 'marker-100';\n}\n\nfunction getIconSize(size: number) {\n return Math.min(100, size) / 100 + 1;\n}\n\nexport class IconClusterLayer extends CompositeLayer {\n shouldUpdateState({ changeFlags }: any) {\n return changeFlags.somethingChanged;\n }\n\n updateState({ props, oldProps, changeFlags }: any) {\n const rebuildIndex = changeFlags.dataChanged || props.sizeScale !== oldProps.sizeScale;\n\n if (rebuildIndex) {\n const index = new Supercluster({ maxZoom: 16, radius: props.sizeScale * Math.sqrt(2) });\n index.load(\n props.data.map((d:any) => ({\n geometry: { coordinates: props.getPosition(d) },\n properties: d\n }))\n );\n this.setState({ index });\n }\n\n const z = Math.floor(this.context.viewport.zoom);\n if (rebuildIndex || z !== this.state.z) {\n this.setState({\n data: this.state.index.getClusters([-180, -85, 180, 85], z),\n z\n });\n }\n }\n\n getPickingInfo({ info, mode }: any) {\n const pickedObject = info.object && info.object.properties;\n if (pickedObject) {\n if (pickedObject.cluster && mode !== 'hover') {\n info.objects = this.state.index\n .getLeaves(pickedObject.cluster_id, 25)\n .map((f:any) => f.properties);\n }\n info.object = pickedObject;\n }\n return info;\n }\n\n renderLayers() {\n const { data } = this.state;\n const { iconAtlas, iconMapping, sizeScale } = this.props as any;\n\n return new IconLayer(\n this.getSubLayerProps({\n id: 'icon',\n data,\n iconAtlas,\n iconMapping,\n sizeScale,\n getPosition: (d:any) => d.geometry.coordinates,\n getIcon: (d:any) => getIconName(d.properties.cluster ? d.properties.point_count : 1),\n getSize: (d:any) => getIconSize(d.properties.cluster ? d.properties.point_count : 1)\n })\n );\n }\n}","export function localStorageSetBoolean(key: string, value: boolean) {\n localStorage.setItem(key, value.toString());\n}\nexport function localStorageGetBoolean(key: string, defaultValue: boolean): boolean {\n const readValue = localStorage.getItem(key);\n if (!readValue) return defaultValue;\n if (readValue === 'true') return true;\n if (readValue === 'false') return false\n return defaultValue;\n}","import React, { Suspense } from \"react\";\nimport { Box, FormControlLabel, Paper, Switch, CircularProgress } from '@mui/material';\nimport { IMapsProps, IMapsState, IMapsStateChangeEvent, INode, ViewMapState } from \"./interfaces_maps\";\n\nimport { IconLayer } from '@deck.gl/layers';\nimport { StaticMap } from 'react-map-gl'\nimport { IconClusterLayer, clusterIconMapping } from \"./iconClusterLayer\";\nimport { InitialViewStateProps } from \"@deck.gl/core/lib/deck\"\nimport { WebMercatorViewport } from '@deck.gl/core';\nimport { ILatLon } from \"..\";\nimport { localStorageGetBoolean, localStorageSetBoolean } from \"../utils/localstorage\";\n\nconst DeckGL = React.lazy(() => import('@deck.gl/react'));\n\n// https://stackoverflow.com/questions/7780981/how-to-validate-latitude-and-longitude\nexport const isLatitude = (num: number) => isFinite(num) && Math.abs(num) <= 90;\nexport const isLongitude = (num: number) => isFinite(num) && Math.abs(num) <= 180;\n\nexport class Maps extends React.Component, IMapsState> {\n state: IMapsState = {\n showCluster: this.props.showCluster,\n mapStyleToggle: true,\n hoverInfo: undefined,\n initialViewState: undefined,\n viewState: undefined\n };\n\n map?: typeof DeckGL;\n\n componentDidMount = () => {\n // this.getUserLocation();\n this.loadMapSettings();\n }\n\n loadMapSettings = () => {\n const mapStyleToggle = localStorageGetBoolean('mapStyleToggle', true);\n this.setState({ mapStyleToggle });\n }\n\n // getUserLocation = async () => {\n // if ('geolocation' in navigator) {\n // /* geolocation is available */\n\n // // TODO: store users last known location so we can load it faster\n // navigator.geolocation.getCurrentPosition((position) => {\n // // doSomething(position.coords.latitude, position.coords.longitude);\n // this.setState({ center: [position.coords.latitude, position.coords.longitude] })\n // });\n\n // } else {\n // /* geolocation IS NOT available */\n // }\n // }\n\n public goToNewLocation = (initialViewState: InitialViewStateProps) => {\n console.log('going to new location', initialViewState);\n this.setState({ initialViewState });\n }\n\n renderTooltip() {\n\n if (!this.state.hoverInfo) return
\n\n const { object, x, y } = this.state.hoverInfo;\n let info = this.state.hoverInfo;\n\n if (info.objects) {\n return (\n
\n {info.objects.map((data, index) => {\n return (\n
\n
{JSON.stringify(data, null, 2)}
\n {/*
{name}
\n
Year: {year || 'unknown'}
\n
Class: {meteorClass}
\n
Mass: {mass}g
*/}\n
\n );\n })}\n
\n );\n }\n\n if (!object) {\n return null;\n }\n\n return object.cluster ? (\n \n {object.point_count} records\n \n ) : (\n \n {object.data.instanceName}\n \n );\n\n }\n\n render() {\n\n \n\n if (!this.props.listOfNodes) return \n // @ts-ignore\n let StaticMapR: any = StaticMap;\n\n const layer = this.state.showCluster\n ? new IconClusterLayer>({\n id: 'icon-cluster',\n data: this.props.listOfNodes,\n // @ts-ignore\n iconAtlas: '/assets/vodaMapMarkerCluster.png',\n // @ts-ignore\n iconMapping: clusterIconMapping,\n // @ts-ignore\n getPosition: d => d.location.coordinates,\n // @ts-ignore\n // getSize: d => 5,\n sizeScale: 40,\n // @ts-ignore\n pickable: true,\n onHover: (hoverInfo) => { this.setState({ hoverInfo }) },\n })\n : new IconLayer>({\n id: 'icon-layer',\n data: this.props.listOfNodes,\n pickable: true,\n // iconAtlas and iconMapping are required\n // getIcon: return a string\n // iconAtlas: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/icon-atlas.png',\n iconAtlas: '/assets/vodaMapMarker.png',\n iconMapping: {\n marker: { x: 0, y: 0, width: 128, height: 256, mask: false },\n selected: { x: 128, y: 0, width: 128, height: 256, mask: false }\n },\n getIcon: (d: any) => {\n // console.log(d);\n return d.picked ? 'selected' : 'marker'\n },\n sizeScale: 10,\n // @ts-ignore\n getPosition: d => d.location.coordinates,\n getSize: d => 8,\n onHover: (hoverInfo) => { this.setState({ hoverInfo }) }\n });\n\n\n return <>\n \n {\n let mapStyleToggle = !this.state.mapStyleToggle;\n localStorageSetBoolean('mapStyleToggle', mapStyleToggle);\n this.setState({ mapStyleToggle });\n }} />} label={this.state.mapStyleToggle ? 'Street' : 'Satelite'} />\n \n \n \n }>\n {\n // @ts-ignore\n {\n // @ts-ignore\n if (el) this.map = el;\n }}\n initialViewState={this.state.initialViewState || this.props.initialViewState || {\n longitude: -122.41669,\n latitude: 37.7853,\n zoom: 13,\n pitch: 0,\n bearing: 0\n }}\n onClick={\n (info: any) => {\n\n if (this.props.disabled === true) return;\n\n if (this.props.onClick) this.props.onClick(info as any);\n\n let ob = info.object as any;\n\n /** if the user clicks on a cluster for center and zoom a bit */\n if (!ob) return;\n if (ob.cluster) {\n let longitude = info.coordinate ? info.coordinate[0] : 0;\n let latitude = info.coordinate ? info.coordinate[1] : 0;\n let zoom = 10;\n if (this.props.initialViewState?.zoom) zoom = this.props.initialViewState?.zoom;\n if (this.state.viewState?.zoom) zoom = this.state.viewState?.zoom;\n if (info.viewport?.zoom) zoom = info.viewport.zoom;\n\n zoom += 3;\n\n this.setState({ initialViewState: { zoom, latitude, longitude, bearing: 0, pitch: 0 } })\n }\n }\n }\n\n getCursor={(e) => {\n if (this.props.disabled === true) return 'default';\n // drag map\n if (!e.isHovering && e.isDragging) return 'grabbing';\n\n // hovering and dragging on a marker? \n if (e.isHovering && e.isDragging) return 'move';\n\n // hovering over a marker\n if (e.isHovering && !e.isDragging) return 'pointer';\n\n // default cursor\n if (!e.isHovering && !e.isDragging) return 'default';\n return 'default'\n }}\n onViewStateChange={(data) => {\n if (this.props.disabled === true) return;\n // add bounds to output\n const viewport = new WebMercatorViewport(data.viewState);\n const nwTemp = viewport.unproject([0, 0]);\n const seTemp = viewport.unproject([viewport.width, viewport.height]);\n const nw: ILatLon = { longitude: nwTemp[0], latitude: nwTemp[1] };\n const se: ILatLon = { longitude: seTemp[0], latitude: seTemp[1] }\n let output: IMapsStateChangeEvent = { ...data, ...{ bounds: { nw, se } } }\n // end add bounds to output\n\n this.setState({ viewState: output.viewState as ViewMapState })\n if (this.props.showCluster && output?.viewState?.zoom < 15) {\n this.setState({ showCluster: true })\n } else {\n this.setState({ showCluster: false })\n }\n if (this.props.onViewStateChange) this.props.onViewStateChange(output);\n }}\n controller={(this.props.disabled === true) ? undefined : true}\n layers={[layer]} >\n\n \n\n {this.renderTooltip()}\n }\n \n \n\n \n \n }\n\n}","import * as React from 'react';\n\nimport {\n Typography,\n Box,\n TextField,\n Paper,\n MenuItem,\n Select,\n SelectChangeEvent\n} from '@mui/material';\nimport { isLatitude, isLongitude } from '../maps';\n\n\n\ninterface WidgetTextProps {\n title: string\n value?: any\n type?: 'latitude' | 'longitude'\n onChange?: (e: React.ChangeEvent | SelectChangeEvent) => void\n valueOptions?: string[]\n error?: boolean\n helperText?: string\n unit?: string\n disabled?: boolean\n}\n\ninterface WidgetTextState {\n value: any\n origValue: any\n}\n\nexport class WidgetText extends React.Component {\n state = {\n origValue: this.props.value,\n value: this.props.value\n }\n\n componentWillReceiveProps = (nextProps: WidgetTextProps) => {\n\n if (JSON.stringify(this.props) !== JSON.stringify(nextProps)) {\n if (nextProps.value !== this.state.origValue) this.setState({ value: nextProps.value, origValue: nextProps.value })\n }\n }\n\n\n onChangeValue = (e: React.ChangeEvent | SelectChangeEvent) => {\n\n if (this.props.onChange === undefined) return;\n\n this.setState({ value: e.target.value })\n\n if (!this.props.onChange) return;\n\n if (this.props.type === 'latitude' && isLatitude(parseFloat(e.target.value))) {\n this.props.onChange(e);\n return;\n }\n\n if (this.props.type === 'longitude' && isLongitude(parseFloat(e.target.value))) {\n this.props.onChange(e);\n return;\n }\n\n this.props.onChange(e);\n }\n\n renderValue = () => {\n\n if ((this.props.onChange === undefined) || (this.props.disabled)) return <>\n {this.state.value}\n \n {this.props.unit && \n {this.props.unit}\n }\n \n\n if (this.props.valueOptions) return \n \n {this.props.valueOptions.map(u => {u})}\n \n\n\n\n return ;\n }\n\n render() {\n return (\n \n \n {this.props.title}\n \n \n {this.renderValue()}\n \n );\n }\n}\n","export function encodeQueryData(data: Record): string {\n const ret = [];\n for (const d in data) ret.push(`${encodeURIComponent(d)}=${encodeURIComponent(data[d] as string)}`);\n return ret.join('&');\n}","// https://community.iotnxt.com/docs/commander/integration/user-preference/\n// https://community.iotnxt.com/assets/js/swagger-definitions/user-preference.json\n// by Rouan van der Ende Fri 08 Jul 2022\n\nimport { IAPIOptions } from \"./main\";\nimport { encodeQueryData } from \"./util_encodequerydata\"\n\n\n\nexport interface UserRecentAppModel {\n appId?: string\n lastModified: string\n};\n\nexport class APIIoTnxtUserPreferenceAPIServiceAPIs {\n private options: IAPIOptions;\n\n constructor(options: IAPIOptions) {\n this.options = options;\n }\n\n private rest_get_v1default_view = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/default-view`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n /** returns theme id */\n private rest_get_v1themes = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/themes`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_post_v1themes_themeId_ = async (params: { themeId: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/themes/{themeId}?${encodeQueryData(params)}`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n private rest_get_v1favorite_apps = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/favorite-apps`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_post_v1favorite_apps_appId_ = async (params: { appId: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/favorite-apps/{appId}?${encodeQueryData(params)}`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n private rest_delete_v1favorite_apps_appId_ = async (params: { appId: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/favorite-apps/{appId}?${encodeQueryData(params)}`, {\n method: 'delete',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_get_v1recent_apps = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/recent-apps`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_post_v1recent_apps_appId = async (params: { appId: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/user-preference/v1/recent-apps/{appId}?${encodeQueryData(params)}`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n // API\n defaultView = {\n get: this.rest_get_v1default_view\n }\n themes = {\n get: this.rest_get_v1themes\n }\n favoriteApps = {\n get: this.rest_get_v1favorite_apps\n }\n recentApps = {\n get: this.rest_get_v1recent_apps\n }\n}","// https://community.iotnxt.com/docs/commander/integration/theming-api/\n// by Rouan van der Ende Fri 08 Jul 2022\n\nimport { IAPIOptions } from \"./main\"\nimport { encodeQueryData } from \"./util_encodequerydata\"\n\nexport interface AddThemeResponseDto {\n themeId: string\n rowVersion: string\n};\n\nexport interface AlarmPrioritySoundsDto {\n accountId?: string\n high?: string\n medium?: string\n low?: string\n};\n\nexport interface DownloadLogoConfigDto {\n layout: IconLayout\n text?: string\n icon?: string\n};\n\nexport interface Icon {\n contentType?: string\n content?: string\n};\n\nexport type IconLayout = \"imageWithText\" | \"image\" | \"text\";\n\nexport type IconMode = \"light\" | \"dark\";\n\n\n\nexport interface SetAccountDefaultThemeRequest {\n themeId: string\n};\n\nexport interface SharedThemeRequest {\n themeId: string\n shareToggle: boolean\n};\n\nexport interface Theme {\n id: string\n name?: string\n disabled: boolean\n config?: any\n shared: boolean\n locked: boolean\n accountId: string\n rowVersion: string\n appearance: ThemeAppearance\n};\n\nexport type ThemeAppearance = 0 | 1;\n\nexport interface ThemeDto {\n id: string\n name?: string\n disabled: boolean\n config?: any\n shared: boolean\n locked: boolean\n rowVersion: string\n appearance: ThemeAppearance\n};\n\nexport interface ViewLogoConfigDto {\n layout: IconLayout\n text?: string\n lightIcon: Icon\n darkIcon: Icon\n};\n\n\n\nexport class APIIoTnxtThemingServiceAPIs {\n private options: IAPIOptions;\n\n constructor(options: IAPIOptions) {\n this.options = options;\n }\n\n private rest_get_v1alarm_priority_sounds = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/alarm-priority-sounds`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_put_v1logo_config = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/logo-config`, {\n method: 'put',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_get_v1logo_config = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/logo-config`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_get_v1logo_config_mode_ = async (params: { mode: IconMode, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/logo-config/{mode}?${encodeQueryData(params)}`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_get_v1themes = async (params: { excludeDisabled: boolean, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes?${encodeQueryData(params)}`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_post_v1themes = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n /** Returns a theme from its id */\n private rest_get_v1themes_id = async (params: { id: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/${params.id}`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_patch_v1themes_id_disable = async (params: { id: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/{id}/disable?${encodeQueryData(params)}`, {\n method: 'patch',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_patch_v1themes_id_enable = async (params: { id: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/{id}/enable?${encodeQueryData(params)}`, {\n method: 'patch',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n\n\n private rest_post_v1themesaccountdefault = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/account/default`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n private rest_delete_v1themesaccountdefault = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/account/default`, {\n method: 'delete',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_get_v1themes_themeId_load = async (params: { themeId: string, rowVersion: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/{themeId}/load?${encodeQueryData(params)}`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_put_v1themes_themeId_ = async (params: { themeId: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/{themeId}?${encodeQueryData(params)}`, {\n method: 'put',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_delete_v1themes_themeId_ = async (params: { themeId: string, }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/{themeId}?${encodeQueryData(params)}`, {\n method: 'delete',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private rest_post_v1themesshared = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/shared`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n api = {\n alarmPrioritySounds: {\n get: this.rest_get_v1alarm_priority_sounds,\n },\n logoConfig: {\n get: this.rest_get_v1logo_config\n },\n themes: {\n get: this.rest_get_v1themes,\n getById: this.rest_get_v1themes_id\n }\n }\n\n account = {\n default: {\n get: async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/theming/v1/themes/account/default`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n }\n }\n };\n\n \n}\n","// https://community.iotnxt.com/docs/commander/integration/theming-api/\n// by Rouan van der Ende Fri 08 Jul 2022\n\nimport { IAPIOptions } from \"./main\"\n\nexport interface IProfile {\n \"id\": string\n \"username\": string\n \"email\": string\n \"firstName\": string\n \"lastName\": string\n \"phoneNumber\": string | null,\n \"countryCode\": string | null,\n \"isEmailVerified\": boolean,\n \"inviteAccepted\": boolean,\n \"enabled\": boolean,\n \"roles\": string[]\n \"groups\": string[]\n \"applications\": string[]\n \"userType\": string\n}\n\nexport interface IRole {\n id: string\n key: string\n seeded: boolean\n includeAllPermissions: boolean\n name: string\n normalizedName: string\n permissions: string[]\n excludedPermissions: string[] | null\n description: string\n accountTypeTags: number[]\n userAccountTypeTags: number[]\n}\n\nexport interface IAccount {\n accountId: string\n alias: string\n enabled: boolean\n name: string\n}\n\nexport class APIIoTnxtAuthorizationAPIs {\n private options: IAPIOptions;\n\n constructor(options: IAPIOptions) {\n this.options = options;\n }\n\n /** get information on the authorized person */\n private get_authorization_profile = async (): Promise => {\n return fetch(`${this.options.baseUrl}/auth/api/v1/authorization/profile`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private get_authorization_profile_accounts = async (): Promise => {\n return fetch(`${this.options.baseUrl}/auth/api/v1/authorization/profile/accounts`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private get_authorization_roles = async (): Promise => {\n return fetch(`${this.options.baseUrl}/auth/api/v1/authorization/roles`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private get_user_groups = async (): Promise => {\n return fetch(`${this.options.baseUrl}/auth/api/v1/authorization/user-groups`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n private get_users = async (): Promise => {\n return fetch(`${this.options.baseUrl}/auth/api/v1/authorization/users`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n };\n\n // API\n\n profile = {\n get: this.get_authorization_profile,\n accounts: this.get_authorization_profile_accounts\n }\n roles = this.get_authorization_roles\n userGroups = this.get_user_groups;\n users = this.get_users;\n}\n","// https://community.iotnxt.com/docs/commander/integration/theming-api/\n// by Rouan van der Ende Fri 08 Jul 2022\n\nimport { IAPIOptions } from \"./main\"\n\nexport interface IUsername {\n id: string\n username: string\n}\n\nexport class APIIoTnxtAccountManagerAPIs {\n private options: IAPIOptions;\n\n constructor(options: IAPIOptions) {\n this.options = options;\n }\n\n account = {\n /** get information on the authorized person */\n get: async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/account-manager/v1/account`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n },\n owners: async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/account-manager/v1/account/owners`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n },\n members: async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/account-manager/v1/account/members`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n },\n }\n}\n","// https://community.iotnxt.com/docs/commander/integration/theming-api/\n\n// https://community.iotnxt.com/docs/commander/integration/entity-access-api/\n\n// by Rouan van der Ende Fri 08 Jul 2022\n\nimport { IAPIOptions } from \"./main\"\n\n\nexport class APIIoTnxtDAPIAPIs {\n private options: IAPIOptions;\n\n constructor(options: IAPIOptions) {\n this.options = options;\n }\n\n\n CommanderConfig = {\n GetDynamicConfig: async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/dapi/v1/CommanderConfig/GetDynamicConfig/`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n }\n }\n\n EntityAccessGroup = {\n GetList: async (): Promise> => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/dapi/v1/EntityAccessGroup/GetList`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n }\n }\n\n EntityAccess = {\n GetPathAccess: async (params: {\n path: string\n recursive: true,\n /** like \"698e9150-d9ce-4697-905a-1f26b81a74b2\" */\n sid: string\n sidType: \"groupId\" | string\n }): Promise> => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/dapi/v1/EntityAccess/GetPathAccess/`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n 'content-type': 'application/json'\n },\n body: JSON.stringify(params)\n }).then((res) => res.json());\n },\n /** from a username get the user's entity access groups */\n GetEntityAccessGroups: async (params: { username: string }): Promise> => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/dapi/v1/EntityAccess/GetEntityAccessGroups`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n 'content-type': 'application/json'\n },\n body: JSON.stringify(params)\n }).then((res) => res.json());\n }\n }\n\n EntityTree = {\n GetAccountChildren: async (): Promise> => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/dapi/v1/EntityTree/GetAccountChildren/`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n },\n }).then((res) => res.json());\n }\n }\n\n TreeBaseEntity = {\n GetChildren: async (params: { entityTypes: string[], id: string }): Promise> => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/dapi/v1/TreeBaseEntity/GetChildren`, {\n method: 'post',\n headers: {\n authorization: this.options.authorization,\n 'content-type': 'application/json'\n },\n body: JSON.stringify(params)\n }).then((res) => res.json());\n }\n }\n}\n\n\nexport interface DaPIAppResponse {\n \"result\": T,\n \"messageType\": \"OK\" | string,\n \"state\": any | null,\n \"sourceMessageID\": string\n}\n\nexport interface IDapiEntityAccessGroup {\n id: string\n name: string\n}\n\n\nexport type TEntityType = \"GroupEntity\" | \"Site\" | string\nexport interface IEntitySmall {\n entityId: string\n entityType: TEntityType\n}\nexport interface IEntity extends IEntitySmall {\n name: string\n idPath?: string\n parentId: string\n hasChildren?: boolean\n ancestors: IEntitySmall[]\n children?: any[]\n}\n\nexport interface IEntityFull extends IEntity {\n rowVersion: string,\n associatedViewId: string\n entityId: string\n entityType: TEntityType,\n uiMayEdit: boolean\n managedBy: string\n ancestors: IEntitySmall[]\n name: string\n parentId: string,\n accountId: string\n tags: string[]\n canHaveChildren: boolean\n level: number\n children?: any[]\n}\n\nexport interface IEntityPathAccess {\n path:string\n sidType: 'groupId'\n sid: string\n grant: 'allowed'\n}\n","// https://community.iotnxt.com/docs/commander/integration/theming-api/\n// by Rouan van der Ende Fri 08 Jul 2022\n\nimport { IProfile } from \"./authorization\";\nimport { IAPIOptions } from \"./main\"\n\n\nexport class APIIoTnxtPolicyServerAPIs {\n private options: IAPIOptions;\n\n constructor(options: IAPIOptions) {\n this.options = options;\n }\n\n account = {\n users: {\n getById: async (params: { userid: string }): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/policy-server/v2/account/users/${params.userid}`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n \"content-type\": \"application/json\"\n },\n }).then((res) => res.json());\n }\n }\n }\n\n groups = async (): Promise => {\n return fetch(`${this.options.baseUrl}/${this.options.nodeapisettings.NodeSettings.TenantUrlName}/_apis/policy-server/v2/groups`, {\n method: 'get',\n headers: {\n authorization: this.options.authorization,\n \"content-type\": \"application/json\"\n },\n }).then((res) => res.json());\n }\n}\n\n\nexport interface IGroup {\n roles: string[]\n applications: string[]\n id:string\n displayName:string\n description: string | null\n active: boolean\n createdAt: string\n createdBy: IDisplay,\n updatedAt: string | null\n updatedBy: IDisplay | null\n users: IDisplay[]\n userCount: number\n}\n\nexport interface IDisplay {\n id: string\n display: string\n}","// https://community.iotnxt.com/docs/commander/integration/theming-api/\n// by Rouan van der Ende Fri 08 Jul 2022\n\nimport { APIIoTnxtThemingServiceAPIs } from \"./theming\";\nimport { APIIoTnxtUserPreferenceAPIServiceAPIs } from \"./userpreference\"\nimport { APIIoTnxtAuthorizationAPIs } from './authorization'\nimport { APIIoTnxtAccountManagerAPIs } from \"./accountManager\";\nimport { APIIoTnxtDAPIAPIs } from './dapi';\nimport { APIIoTnxtPolicyServerAPIs } from \"./policyServer\";\nimport { INodeSettings } from \"../interfaces\";\n\nexport interface IAPIOptions {\n authorization: string,\n baseUrl: string\n nodeapisettings: INodeSettings\n}\n\n\n/** frontend api calls */\nexport class APIIoTnxtMain {\n private options: IAPIOptions;\n\n userpreferences: APIIoTnxtUserPreferenceAPIServiceAPIs\n theming: APIIoTnxtThemingServiceAPIs\n authorization: APIIoTnxtAuthorizationAPIs;\n accountManager: APIIoTnxtAccountManagerAPIs;\n dapi: APIIoTnxtDAPIAPIs;\n policyServer: APIIoTnxtPolicyServerAPIs;\n\n constructor(options: IAPIOptions) {\n this.options = options;\n this.userpreferences = new APIIoTnxtUserPreferenceAPIServiceAPIs(options);\n this.theming = new APIIoTnxtThemingServiceAPIs(options);\n this.authorization = new APIIoTnxtAuthorizationAPIs(options);\n this.accountManager = new APIIoTnxtAccountManagerAPIs(options);\n this.dapi = new APIIoTnxtDAPIAPIs(options);\n this.policyServer = new APIIoTnxtPolicyServerAPIs(options);\n }\n\n /** for quick testing. */\n fetch = async (path: string, method: string, body?: string): Promise => {\n return fetch(`${this.options.baseUrl}${path}`, {\n method,\n headers: {\n authorization: this.options.authorization,\n \"content-type\" : \"application/json\"\n },\n body\n }).then((res) => res.json());\n };\n}\n\n\n","import { Box, Button, Chip, CircularProgress, Paper, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport {\n APIIoTnxtMain,\n IProfile,\n IGroup,\n IDapiEntityAccessGroup\n} from \"../../commanderapi\";\nimport { config } from '../../App'\nimport { INodeSettings } from \"../../interfaces\";\n\ninterface Props {\n authorization: string\n nodesettings: INodeSettings\n}\n\ninterface State {\n profile?: IProfile\n groups?: IGroup[]\n entityAccessGroups?: IDapiEntityAccessGroup[]\n}\n\nexport class ProfileDisplay extends React.Component {\n state: State = {}\n\n componentDidMount = () => { this.getDataAsync(); }\n\n getDataAsync = async () => {\n\n const iotnxtAPI = new APIIoTnxtMain({\n authorization: this.props.authorization,\n baseUrl: config.baseUrl,\n nodeapisettings: this.props.nodesettings\n });\n\n const iotnxtAPIRobot = new APIIoTnxtMain({\n authorization: this.props.authorization,\n baseUrl: config.baseUrlRobot,\n nodeapisettings: this.props.nodesettings\n });\n\n // execute in parallel\n const [\n profile,\n groups\n ] = await Promise.all([\n iotnxtAPI.authorization.profile.get(),\n iotnxtAPIRobot.policyServer.groups()\n ])\n this.setState({ profile, groups });\n\n let entityAccessGroups = await iotnxtAPIRobot.dapi.EntityAccess.GetEntityAccessGroups({ username: profile.username }).then(r => r.result)\n this.setState({ entityAccessGroups });\n // const profile = await iotnxtAPI.authorization.profile.get();\n\n\n // const groups = await iotnxtAPI.policyServer.groups();\n // this.setState({ groups });\n\n\n }\n\n render() {\n if (!this.state.profile) return \n\n let p = this.state.profile;\n return <>\n\n \n\n \n Account Profile\n \n \n Edit\n \n \n \n \n\n User Type\n {p.userType}\n\n First Name\n {p.firstName}\n\n Last Name\n {p.lastName}\n\n Email\n {p.email} {p.isEmailVerified ? '(verified)' : '(not verified)'}\n\n Roles\n \n {p.roles.map(r => )}\n \n\n Groups\n \n {p.groups.map(groupid => {\n let groupDisplayName = groupid;\n if (this.state.groups) {\n this.state.groups.filter(g => g.id === groupid).forEach(g => { groupDisplayName = g.displayName })\n }\n\n return \n }\n )}\n \n\n Applications\n \n {p.applications.map(r => )}\n \n\n Entity Access Groups\n {!this.state.entityAccessGroups && }\n {this.state.entityAccessGroups && \n {this.state.entityAccessGroups.map(e => )}\n }\n {(this.state.entityAccessGroups && !(this.state.entityAccessGroups.length > 0)) && None}\n \n \n }\n}\n\n// class Testapi extends React.Component<{ url: string, requestOptions?: RequestInit }> {\n// state: any = {\n// response: undefined\n// }\n// render() {\n// return \n// {this.props.url}\n// \n// {this.state.error && {this.state.error}}\n// {JSON.stringify(this.state.response)}\n// \n// }\n// }","import { Box, Button, Chip, CircularProgress, IconButton, Paper, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport { APIIoTnxtMain, IUsername, IDapiEntityAccessGroup } from \"../../commanderapi\";\n\nimport {\n DataGridPro,\n LicenseInfo} from '@mui/x-data-grid-pro';\nimport { LinkRounded } from \"@mui/icons-material\";\nimport { config } from '../../App'\nimport { INodeSettings } from \"../../interfaces\";\n\nLicenseInfo.setLicenseKey('11dfa392be05d10d58887edf4f20e775T1JERVI6NDE2MjgsRVhQSVJZPTE2ODEzMzgwODU1NTIsS0VZVkVSU0lPTj0x');\n\ninterface Props {\n authorization: string\n nodesettings: INodeSettings\n}\n\ninterface State {\n // profile?: IProfile\n // groups?: IGroup[]\n owners?: IUsername[],\n members?: IUsername[]\n rows?: any[]\n}\n\ninterface IVSpaceUser extends IUsername {\n id: string,\n username: string,\n accountType: 'member' | 'owner',\n entityAccessGroups?: IDapiEntityAccessGroup[]\n}\n\nexport class UsersDisplay extends React.Component {\n state: State = {}\n\n componentDidMount = () => { this.getDataAsync(); }\n\n getDataAsync = async () => {\n\n // const iotnxtAPI = new APIIoTnxtMain({\n // authorization: this.props.authorization,\n // baseUrl: config.baseUrl\n // });\n\n const iotnxtAPIRobot = new APIIoTnxtMain({\n authorization: this.props.authorization,\n baseUrl: config.baseUrlRobot,\n nodeapisettings: this.props.nodesettings\n });\n\n const [members, owners] = await Promise.all([\n iotnxtAPIRobot.accountManager.account.members(),\n iotnxtAPIRobot.accountManager.account.owners()\n ]);\n\n let rows: IVSpaceUser[] = [];\n\n members.forEach(m => {\n rows.push({\n id: m.id,\n username: m.username,\n accountType: 'member'\n })\n })\n\n owners.forEach(o => {\n rows.push({\n id: o.id,\n username: o.username,\n accountType: 'owner'\n })\n })\n\n await Promise.all(rows.map(user => iotnxtAPIRobot.dapi.EntityAccess.GetEntityAccessGroups({ username: user.username }).then(entityResult => {\n user.entityAccessGroups = entityResult.result\n })));\n\n // console.log({ rows })\n\n this.setState({ members, owners, rows });\n }\n\n render() {\n // if (!this.state.users) return \n\n // let p = this.state.users;\n\n if (!this.state.members || !this.state.owners) return \n\n if (!this.state.rows) return \n\n return \n \n Members\n \n \n \n \n \n\n \n rows={this.state.rows}\n density=\"compact\"\n sx={{ height: 500 }}\n pageSize={10}\n columns={[\n {\n field: 'id',\n headerName: '',\n renderCell: (props => \n \n )\n },\n {\n field: 'username', width: 400,\n },\n { field: 'accountType' },\n {\n field: 'entityAccessGroups',\n flex: 1,\n renderCell: (props) => (props.row.entityAccessGroups && (props.row.entityAccessGroups.length > 0))\n ? props.row.entityAccessGroups.map(e => )\n : none\n }\n ]}\n />\n \n }\n}","import { Box, Button, Paper, Skeleton, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport {\n APIIoTnxtMain,\n IProfile,\n IGroup,\n IDapiEntityAccessGroup,\n IEntity,\n IEntityPathAccess\n} from \"../../commanderapi\";\n\nimport TreeView from '@mui/lab/TreeView';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport { alpha, styled } from '@mui/material/styles';\nimport TreeItem, { TreeItemProps, treeItemClasses } from '@mui/lab/TreeItem';\nimport Collapse from '@mui/material/Collapse';\nimport { useSpring, animated } from 'react-spring';\nimport { TransitionProps } from '@mui/material/transitions';\nimport { CheckBoxRounded, CheckBoxOutlineBlankRounded, LinkRounded } from \"@mui/icons-material\";\n\nimport { config } from '../../App'\nimport { INodeSettings } from \"../../interfaces\";\n\ninterface Props {\n authorization: string\n entityAccessGroup: IDapiEntityAccessGroup\n nodeapisettings: INodeSettings\n}\n\ninterface State {\n profile?: IProfile\n groups?: IGroup[]\n entityAccessGroups?: IDapiEntityAccessGroup[]\n entityList?: IEntity[]\n entityAccessGetPathAccess?: IEntityPathAccess[]\n}\n\nexport class EntityAccessDisplay extends React.Component {\n state: State = {\n\n }\n\n componentDidMount = () => { this.getDataAsync(); }\n\n getDataAsync = async () => {\n\n const iotnxtAPI = new APIIoTnxtMain({\n authorization: this.props.authorization,\n baseUrl: config.baseUrl,\n nodeapisettings: this.props.nodeapisettings\n });\n\n const iotnxtAPIRobot = new APIIoTnxtMain({\n authorization: this.props.authorization,\n baseUrl: config.baseUrlRobot,\n nodeapisettings: this.props.nodeapisettings\n });\n\n const [\n profile,\n groups,\n entityList\n ] = await Promise.all([\n iotnxtAPI.authorization.profile.get(),\n iotnxtAPIRobot.policyServer.groups(),\n iotnxtAPI.dapi.EntityTree.GetAccountChildren().then(r => r.result)\n ])\n\n const entityAccessGetPathAccess = await iotnxtAPIRobot.dapi.EntityAccess.GetPathAccess({\n \"path\": `/${this.props.nodeapisettings.DigitwinClientOptions.DefaultParentId}`,\n recursive: true,\n \"sidType\": \"groupId\",\n \"sid\": this.props.entityAccessGroup.id\n }).then(r => r.result)\n\n this.setState({ profile, groups, entityList, entityAccessGetPathAccess });\n console.log({ profile, groups, entityList, entityAccessGetPathAccess })\n }\n\n getEntityPathAccessByEntityId = (entityId: string): IEntityPathAccess | undefined => {\n if (!this.state.entityAccessGetPathAccess) return undefined;\n let find = this.state.entityAccessGetPathAccess.filter(a => a.path.endsWith(entityId))\n if (!find || !find[0]) return undefined;\n return find[0]\n }\n\n RichObjectTreeView = (props: { data: RenderTree }) => {\n const renderTree = (nodes: RenderTree, parentGrant?: any) => {\n let pathaccess = this.getEntityPathAccessByEntityId(nodes.entityId)\n\n let grant = (parentGrant !== undefined) ? parentGrant : pathaccess?.grant;\n\n return {grant ? : } {nodes.name} {nodes.entityType ? `(${nodes.entityType})` : ''}\n }>\n {Array.isArray(nodes.children)\n ? nodes.children.map((node) => renderTree(node, grant))\n : null}\n \n };\n\n return (\n }\n defaultExpanded={['root']}\n defaultExpandIcon={}\n sx={{ height: '100%', flexGrow: 1, width: '100%', overflowY: 'auto' }}\n >\n {renderTree(props.data)}\n \n );\n }\n\n render() {\n if (!this.state.entityList) return \n\n return \n {/* {this.props.entityAccessGroup.id}\n {this.props.entityAccessGroup.name} */}\n }\n target=\"_blank\"\n href={`${this.props.nodeapisettings.NodeSettings.DashboardUrl}/_apps/account-manager/details/entity-access-groups/edit/${this.props.entityAccessGroup.id}`}>\n {this.props.entityAccessGroup.name}\n \n \n {this.RichObjectTreeView({ data: generateTree(this.state.entityList, this.props.nodeapisettings.DigitwinClientOptions.DefaultParentId) })}\n \n \n }\n\n\n}\n\n\nfunction generateTree(list: IEntity[], parentId: string): RenderTree {\n const tree: RenderTree = {\n entityId: parentId,\n name: 'Click to expand',\n // entityType: \"Click to expand\",\n children: [],\n };\n\n list.forEach(e => {\n if (e.parentId && e.parentId === tree.entityId) {\n if (tree.children) { tree.children.push(e) } else { tree.children = [e]; }\n }\n })\n\n return tree\n}\n\n\n\ninterface RenderTree {\n entityId: string;\n name?: string;\n entityType?: string\n children?: RenderTree[];\n}\n\n\nfunction TransitionComponent(props: TransitionProps) {\n const style = useSpring({\n from: {\n opacity: 0,\n transform: 'translate3d(20px,0,0)',\n },\n to: {\n opacity: props.in ? 1 : 0,\n transform: `translate3d(${props.in ? 0 : 20}px,0,0)`,\n },\n });\n\n return (\n \n \n \n );\n}\n\nconst StyledTreeItem = styled((props: TreeItemProps) => (\n \n))(({ theme }) => ({\n [`& .${treeItemClasses.iconContainer}`]: {\n '& .close': {\n opacity: 0.3,\n },\n },\n [`& .${treeItemClasses.group}`]: {\n marginLeft: 15,\n paddingLeft: 18,\n borderLeft: `1px dashed ${alpha(theme.palette.text.primary, 0.4)}`,\n },\n}));\n","import { Box, CircularProgress, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport {\n APIIoTnxtMain,\n IProfile,\n IGroup,\n IDapiEntityAccessGroup,\n IEntity,\n IEntityPathAccess\n} from \"../../commanderapi\";\n\nimport { EntityAccessDisplay } from \".\";\n\nimport { config } from '../../App'\nimport { INodeSettings } from \"../../interfaces\";\n\ninterface IProps {\n authorization: string\n nodeapisettings: INodeSettings\n}\n\ninterface IState {\n profile?: IProfile\n groups?: IGroup[]\n entityAccessGroups?: IDapiEntityAccessGroup[]\n entityList?: IEntity[]\n entityAccessGetPathAccess?: IEntityPathAccess[]\n}\n\nexport class EntityAccessGroupsPage extends React.Component {\n state: IState = {\n\n }\n\n componentDidMount = () => { this.getDataAsync(); }\n\n getDataAsync = async () => {\n\n const iotnxtAPI = new APIIoTnxtMain({\n authorization: this.props.authorization,\n baseUrl: config.baseUrl,\n nodeapisettings: this.props.nodeapisettings\n });\n\n const iotnxtAPIRobot = new APIIoTnxtMain({\n authorization: this.props.authorization,\n baseUrl: config.baseUrlRobot,\n nodeapisettings: this.props.nodeapisettings\n });\n\n const [\n profile,\n groups,\n entityList\n ] = await Promise.all([\n iotnxtAPI.authorization.profile.get(),\n iotnxtAPIRobot.policyServer.groups(),\n iotnxtAPIRobot.dapi.EntityTree.GetAccountChildren().then(r => r.result)\n ])\n\n\n let entityAccessGroups = await iotnxtAPIRobot.dapi.EntityAccessGroup.GetList().then(r => r.result)\n\n\n this.setState({ profile, groups, entityList, entityAccessGroups });\n console.log({ profile, groups, entityList, entityAccessGroups })\n }\n\n\n render() {\n if (!this.state.entityAccessGroups) return \n\n\n return \n Entity Access Groups\n\n {this.state.entityAccessGroups.map(entityAccessGroup => )}\n\n \n }\n\n\n}\n\n","// Title: Vodafone VSpaces QA API\n// Auto Generated API using OpenSwag on 2022-04-12T07:41:38.278Z\n// Servers: https://vspaces.vodafone.qa.iotnxt.io\n\nimport { IToken } from '../components/utils/oauth/itoken';\nimport {\n DigitwinPaginationFilter,\n ICloudServiceActionResult,\n ICloudServiceActionResultPaged,\n HistoryRecord,\n IThemeResponse\n} from './interfaces';\n\nexport class APIVodafoneVSpacesAPI {\n authorization = '';\n baseUrl = '';\n\n constructor(token?: IToken) {\n if (token) {\n this.authorization = `${token.token_type} ${token.access_token}`;\n }\n }\n\n private rest_get_apiAppSettingsGet = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/AppSettings/Get`, {\n method: 'get',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesDigitwinUploadCsv = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/UploadCsv`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesDigitwinGetPagedCsvInstances = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/GetPagedCsvInstances`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n private rest_put_apiv1VSpacesDigitwinApproveCsvInstance = async (params: { id: string, }): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/ApproveCsvInstance?${encodeQueryData(params)}`, {\n method: 'put',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_delete_apiv1VSpacesDigitwinRemoveCsvInstance = async (params: { id: string, }): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/RemoveCsvInstance?${encodeQueryData(params)}`, {\n method: 'delete',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_put_apiv1VSpacesDigitwinApproveDraftCsvInstances = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/ApproveDraftCsvInstances`, {\n method: 'put',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_delete_apiv1VSpacesDigitwinRemoveErrorCsvInstances = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/RemoveErrorCsvInstances`, {\n method: 'delete',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_get_apiv1VSpacesDigitwinGetInstance = async (params: { id: string, }): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/GetInstance?${encodeQueryData(params)}`, {\n method: 'get',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesDigitwinGetPagedDigitwinInstances = async (query: DigitwinPaginationFilter): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/GetPagedDigitwinInstances`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(query),\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesDigitwinAddOrUpdateInstance = async (body: T): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/AddOrUpdateInstance`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesDigitwinAddOrUpdateManyInstances = async (body: T[]): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/AddOrUpdateManyInstances`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body),\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesDigitwinRemoveInstance = async (body: T): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/RemoveInstance`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(body)\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesDigitwinGetPagedUpdateHistory = async (query: DigitwinPaginationFilter): Promise[]>> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/GetPagedUpdateHistory`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify(query),\n }).then((res) => res.json());\n };\n\n private rest_get_apiv1VSpacesDigitwinGetUpdateHistory = async (params: { id: string, }): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesDigitwin/GetUpdateHistory?${encodeQueryData(params)}`, {\n method: 'get',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_get_apiv1VSpacesFrontendGetJsonProperties = async (params: { csvOnly: boolean, }): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesFrontend/GetJsonProperties?${encodeQueryData(params)}`, {\n method: 'get',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_get_apiv1VSpacesFrontendGetThemeProperties = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesFrontend/GetThemeProperties`, {\n method: 'get',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_get_apiv1VSpacesFrontendGetUserCustomData = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesFrontend/GetUserCustomData`, {\n method: 'get',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n }).then((res) => res.json());\n };\n\n private rest_post_apiv1VSpacesFrontendSetUserCustomData = async (): Promise> => {\n return fetch(`${this.baseUrl}/api/v1/VSpacesFrontend/SetUserCustomData`, {\n method: 'post',\n headers: {\n authorization: this.authorization,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({}),\n }).then((res) => res.json());\n };\n\n api = {\n AppSettings: {\n Get: this.rest_get_apiAppSettingsGet\n },\n v1: {\n VSpacesDigitwin: {\n UploadCsv: this.rest_post_apiv1VSpacesDigitwinUploadCsv,\n GetPagedCsvInstances: this.rest_post_apiv1VSpacesDigitwinGetPagedCsvInstances,\n ApproveCsvInstance: this.rest_put_apiv1VSpacesDigitwinApproveCsvInstance,\n RemoveCsvInstance: this.rest_delete_apiv1VSpacesDigitwinRemoveCsvInstance,\n ApproveDraftCsvInstances: this.rest_put_apiv1VSpacesDigitwinApproveDraftCsvInstances,\n RemoveErrorCsvInstances: this.rest_delete_apiv1VSpacesDigitwinRemoveErrorCsvInstances,\n GetInstance: this.rest_get_apiv1VSpacesDigitwinGetInstance,\n GetPagedDigitwinInstances: this.rest_post_apiv1VSpacesDigitwinGetPagedDigitwinInstances,\n AddOrUpdateInstance: this.rest_post_apiv1VSpacesDigitwinAddOrUpdateInstance,\n AddOrUpdateManyInstances: this.rest_post_apiv1VSpacesDigitwinAddOrUpdateManyInstances,\n RemoveInstance: this.rest_post_apiv1VSpacesDigitwinRemoveInstance,\n GetPagedUpdateHistory: this.rest_post_apiv1VSpacesDigitwinGetPagedUpdateHistory,\n GetUpdateHistory: this.rest_get_apiv1VSpacesDigitwinGetUpdateHistory\n },\n VSpacesFrontend: {\n GetJsonProperties: this.rest_get_apiv1VSpacesFrontendGetJsonProperties,\n GetThemeProperties: this.rest_get_apiv1VSpacesFrontendGetThemeProperties,\n GetUserCustomData: this.rest_get_apiv1VSpacesFrontendGetUserCustomData,\n SetUserCustomData: this.rest_post_apiv1VSpacesFrontendSetUserCustomData\n }\n }\n }\n\n}\n\nexport function encodeQueryData(data: Record): string {\n const ret = [];\n for (const d in data) ret.push(`${encodeURIComponent(d)}=${encodeURIComponent(data[d] as string)}`);\n return ret.join('&');\n}","import { Alert, Box, Divider, IconButton, Typography } from '@mui/material';\nimport { ArrowBackTwoTone } from '@mui/icons-material';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { ICloudServiceActionResult } from './interfaces';\n\nexport function PageView(props: {\n children: any,\n id?: string,\n backButton?: boolean\n /** custom url for back button */\n to?: string\n title?: string,\n caption?: string\n header?: any\n /** show please wait message */\n pleaseWait?: boolean\n /** used to display success/error responses */\n lastResponses?: ICloudServiceActionResult[]\n}) {\n if (props.title && !props.caption) document.title = `${props.title}`\n if (!props.title && props.caption) document.title = `${props.caption}`\n if (props.title && props.caption) document.title = `${props.caption} ${props.title}`\n\n return (\n {(props.backButton && (props.caption || props.title)) &&\n \n {props.backButton && \n \n }\n\n \n\n \n {props.caption && {props.caption.toUpperCase()}}\n {props.title && {props.title}}\n \n\n \n \n \n {props.header}\n \n\n \n }\n\n {props.pleaseWait && Please Wait...} \n\n {props.lastResponses && props.lastResponses.map((r, i) => {r.exceptionMessage || r.message})}\n \n \n \n {props.children}\n \n \n \n );\n}\n","import {\n DataGridPro,\n GridActionsCellItem\n} from '@mui/x-data-grid-pro';\n\nimport * as React from 'react';\nimport { PageView } from './page';\n\nimport {\n Box,\n Paper,\n Typography,\n CircularProgress,\n Alert,\n FormControlLabel,\n FormGroup,\n Switch\n} from '@mui/material';\n\nimport { IToken } from '../components';\nimport { APIVodafoneVSpacesAPI } from './api';\nimport { ICloudServiceActionResultPaged, HistoryRecord } from './interfaces';\nimport { IVSpaceProperty } from './interfaces_vspaces';\nimport { useParams } from 'react-router-dom';\nimport moment from 'moment';\nimport { UndoTwoTone } from '@mui/icons-material';\n\n\ninterface VSpaceHistoryProps {\n token: IToken;\n instanceId?: string\n /** dont use page layout only return component */\n only?: boolean \n}\n\ninterface VSpaceHistoryState {\n timestampFormat: boolean\n historyResponse?: ICloudServiceActionResultPaged[]>;\n}\n\nexport class VSpaceHistory extends React.Component {\n state: VSpaceHistoryState = {\n timestampFormat: true\n }\n api: APIVodafoneVSpacesAPI = new APIVodafoneVSpacesAPI();\n\n componentDidMount = async () => {\n this.api.authorization = `${this.props.token.token_type} ${this.props.token.access_token}`;\n\n let historyResponse = await this.api.api.v1.VSpacesDigitwin\n .GetPagedUpdateHistory(\n {\n \"orderByQuery\": \"\",\n \"pageNumber\": 1,\n \"pageSize\": 100000,\n \"selectQuery\": \"\",\n \"whereQuery\": {}\n }\n );\n\n if (this.props.instanceId && historyResponse && historyResponse.data) {\n historyResponse.data = historyResponse.data.filter(i => i.item.instanceId === this.props.instanceId)\n }\n\n this.setState({ historyResponse });\n }\n\n render() {\n if (!this.state.historyResponse) return ;\n\n if (this.state.historyResponse.isSuccessful === false || !this.state.historyResponse.data) {\n return \n {this.state.historyResponse.message} {this.state.historyResponse.exceptionMessage}\n \n }\n\n if (this.props.only) return \n {this.renderComponent()}\n \n\n let instanceName = '';\n if (this.state.historyResponse?.data && this.state.historyResponse?.data[0] && this.state.historyResponse?.data[0].item?.instanceName) {\n instanceName = this.state.historyResponse.data[0].item.instanceName;\n }\n\n return {this.renderComponent()}\n }\n\n renderComponent() {\n if (!this.state.historyResponse) return ;\n\n if (this.state.historyResponse.isSuccessful === false || !this.state.historyResponse.data) {\n return \n {this.state.historyResponse.message} {this.state.historyResponse.exceptionMessage}\n \n }\n\n return (<>\n\n \n \n {\n this.setState({ timestampFormat: !this.state.timestampFormat })\n }} />} label=\"Format timestamp\" />\n \n \n\n \n \n\n {\n // @ts-ignore\n r.timestamp = new Date(r.timestamp);\n return r;\n })}\n sortModel={[{ field: 'timestamp', sort: 'desc' }]}\n columns={[\n {\n field: 'undo',\n headerName: '',\n width: 50,\n renderHeader: (props) => {\n return <>;\n },\n renderCell: (props) => {\n return }\n label=\"Undo\"\n onClick={async () => {\n const response = await this.api.api.v1.VSpacesDigitwin.AddOrUpdateInstance(props.row.historyItem)\n console.log(response);\n }}\n color=\"info\"\n />\n }\n },\n {\n field: 'timestamp',\n headerName: 'Timestamp',\n type: 'dateTime',\n flex: 0,\n width: 180,\n renderCell: this.state.timestampFormat ? (props) => \n {moment(props.value).fromNow()}\n \n : undefined\n }, {\n field: 'username',\n headerName: 'Username',\n flex: 0,\n width: 180,\n },\n {\n field: 'item',\n headerName: 'Instance Name',\n renderCell: (props) => props.row.item.instanceName,\n width: 180,\n }, {\n field: 'action',\n headerName: 'Action',\n flex: 1,\n renderCell: (props) => {\n return HumanReadableHistoryDiff(props.row as any)\n }\n }]}\n />\n\n \n \n );\n }\n}\n\nexport default function VSpaceHistoryRoute(props: VSpaceHistoryProps) {\n let params = useParams<\"instanceId\">();\n // let location = useLocation();\n // let navigate = useNavigate();\n\n if (!params.instanceId) return Missing instanceId\n\n return \n}\n\n\nexport function HumanReadableHistoryDiff(\n mostrecent: HistoryRecord,\n simplified?: boolean\n): string {\n if (!mostrecent) return '';\n\n if (mostrecent && mostrecent.action === \"Updated\") {\n let description = simplified ? `` : `${mostrecent.action} `;\n Object.keys(mostrecent.item).forEach((prop) => {\n // if (prop === 'cacheLastUpdatedDate') return;\n // @ts-ignore\n if (mostrecent.item[prop] !== mostrecent.historyItem[prop]) {\n // @ts-ignore\n description += `${prop} changed from \"${mostrecent.historyItem[prop]}\" to \"${mostrecent.item[prop]}\" `;\n }\n });\n return `${description}`;\n }\n\n if (simplified) return ''; // used on the footer. Then we only show what changed.\n\n return `${mostrecent.action}`;\n}","import * as React from 'react';\n\nimport {\n Typography,\n CircularProgress,\n Alert,\n} from '@mui/material';\n\nimport { IToken } from '../components';\nimport { APIVodafoneVSpacesAPI } from './api';\nimport { ICloudServiceActionResultPaged, HistoryRecord } from './interfaces';\nimport { IVSpaceProperty } from './interfaces_vspaces';\nimport { HumanReadableHistoryDiff } from './vspace_history';\nimport moment from 'moment';\n\ninterface VSpaceHistoryMostRecentProps {\n token: IToken;\n}\n\ninterface VSpaceHistoryMostRecentState {\n timestampFormat: boolean\n historyResponse?: ICloudServiceActionResultPaged[]>;\n}\n\nexport class VSpaceHistoryMostRecent extends React.Component {\n state: VSpaceHistoryMostRecentState = {\n timestampFormat: true\n }\n api: APIVodafoneVSpacesAPI = new APIVodafoneVSpacesAPI();\n\n componentDidMount = async () => {\n this.api.authorization = `${this.props.token.token_type} ${this.props.token.access_token}`;\n\n let historyResponse = await this.api.api.v1.VSpacesDigitwin\n .GetPagedUpdateHistory(\n {\n \"orderByQuery\": \"\",\n \"pageNumber\": 1,\n \"pageSize\": 1,\n \"selectQuery\": \"\",\n \"whereQuery\": {}\n }\n );\n this.setState({ historyResponse });\n }\n\n render() {\n if (!this.state.historyResponse) return ;\n\n if (this.state.historyResponse.isSuccessful === false || !this.state.historyResponse.data) {\n return \n {this.state.historyResponse.message} {this.state.historyResponse.exceptionMessage}\n \n }\n\n if (!this.state.historyResponse.data) return 'no recent history';\n if (!this.state.historyResponse.data[0]) return 'no recent history';\n\n return (\n {HumanReadableHistoryDiffWithDetails(this.state.historyResponse.data[0])}\n );\n }\n}\n\nexport function HumanReadableHistoryDiffWithDetails(\n mostrecent: HistoryRecord\n): string {\n if (!mostrecent) return '';\n \n return `${ moment(mostrecent.timestamp).fromNow()} ${mostrecent.username} ${mostrecent.action} ${mostrecent.item.instanceName} ${mostrecent.item.use} ${HumanReadableHistoryDiff(mostrecent, true)}`;\n}\n","import { IVSpaceProperty } from \"./interfaces_vspaces\";\n\nexport const processInstanceCalculations = (p: IVSpaceProperty): IVSpaceProperty => {\n if (!p.latitude) p.latitude = 0;\n if (!p.longitude) p.longitude = 0;\n\n // zero nulls\n if (!p.assignedUsers) p.assignedUsers = 0;\n if (!p.utilizedArea) p.utilizedArea = 0;\n if (!p.utilityCost) p.utilityCost = 0;\n if (!p.estateCost) p.estateCost = 0;\n if (!p.facilitiesHardCost) p.facilitiesHardCost = 0;\n if (!p.facilitiesSoftCost) p.facilitiesSoftCost = 0;\n\n // from spec/chat:\n // --------------------\n // the Total Cost: Utility cost + Estate Cost + Facilities Hard cost + Facilities Soft Cost,\n // Area required to meet group target: Assigned Usersx10 and\n // Cost of Surplus Area p.a=:Property cost – (cost per sqm x F:Area required to meet group target)\n // cost per sqm: Total Property Cost/Utilized Area\n // is for each Purpose. and the values shown under the map view must be the total, similar to the total Cost currently used.\n\n p.calculatedAreaRequiredToMeetGroupTarget = p.assignedUsers * 10;\n p.calculatedTotalCost = p.utilityCost + p.estateCost + p.facilitiesHardCost + p.facilitiesSoftCost;\n p.calculatedCostPerSQM = p.calculatedTotalCost / p.utilizedArea;\n\n if (isNaN(p.calculatedCostPerSQM)) p.calculatedCostPerSQM = 0;\n\n // Calculate Cost of Surplus Area\n const costGroupTarget = (p.calculatedCostPerSQM * p.calculatedAreaRequiredToMeetGroupTarget);\n\n p.calculatedCostOfSurplusAreaPA = p.calculatedTotalCost - costGroupTarget;\n if (isNaN(p.calculatedCostOfSurplusAreaPA)) p.calculatedCostOfSurplusAreaPA = 0;\n\n if (!isFinite(p.calculatedCostOfSurplusAreaPA)) p.calculatedCostOfSurplusAreaPA = 0;\n\n if (!isFinite(p.calculatedCostPerSQM)) p.calculatedCostPerSQM = 0;\n return p;\n}\n\n\nexport const removeCalculations = (p: IVSpaceProperty): IVSpaceProperty => {\n let tempcopy: IVSpaceProperty = JSON.parse(JSON.stringify(p));\n delete tempcopy.calculatedAreaRequiredToMeetGroupTarget;\n delete tempcopy.calculatedCostOfSurplusAreaPA;\n delete tempcopy.calculatedCostPerSQM;\n delete tempcopy.calculatedTotalCost;\n delete tempcopy.cacheInsertedDate;\n delete tempcopy.cacheItemState;\n delete tempcopy.cacheLastUpdatedDate;\n return tempcopy;\n}\n\n\nexport const isDataDifferent = (incoming: IVSpaceProperty, existing: IVSpaceProperty): boolean => {\n let foundDifference = false;\n Object.keys(incoming).forEach(k => {\n try {\n if (incoming[k as keyof IVSpaceProperty] !== existing[k as keyof IVSpaceProperty]) foundDifference = true;\n } catch (err: any) { console.log(`Error isDataDifferent(). Could not compare key ${k}, Error: ${err.message}`) }\n })\n\n return foundDifference;\n}","import React, { useState, Suspense } from \"react\";\n\nimport {\n Alert,\n AlertColor,\n Box,\n Button,\n Divider,\n Tooltip\n} from \"@mui/material\";\n\nimport AddIcon from '@mui/icons-material/Add';\n\n// https://mui.com/x/react-data-grid/#commercial-version\nimport {\n useGridApiRef,\n DataGridPro,\n GridApi,\n GridColumns,\n GridRowParams,\n MuiEvent,\n GridToolbarContainer,\n GridActionsCellItem,\n GridEventListener,\n GridEvents,\n GridRowId,\n GridRowModel,\n LicenseInfo,\n GridSortModel,\n GridSortItem,\n GridFilterModel,\n GridLinkOperator\n} from '@mui/x-data-grid-pro';\n\n\nimport {\n randomId,\n} from '@mui/x-data-grid-generator';\n\nimport _ from \"lodash\";\nimport {\n AddTwoTone,\n DeleteTwoTone,\n EditTwoTone,\n RefreshTwoTone,\n SaveTwoTone,\n UndoTwoTone,\n UploadFileTwoTone,\n} from \"@mui/icons-material\";\nimport { ICloudServiceActionResult } from \"./interfaces\";\n\nimport { IVSpaceProperty } from \"./interfaces_vspaces\";\nimport { templateNameHardcoded } from \"./vspace_main\";\n\nimport { isDataDifferent } from \"./vspace_calculations\";\n\nconst ExportXLSX = React.lazy(() => import(\"./export_xlsx\"));\nconst ImportXLSX = React.lazy(() => import(\"./import_xlsx\"));\n\ninterface EditToolbarProps {\n apiRef: React.MutableRefObject;\n}\n\nLicenseInfo.setLicenseKey('11dfa392be05d10d58887edf4f20e775T1JERVI6NDE2MjgsRVhQSVJZPTE2ODEzMzgwODU1NTIsS0VZVkVSU0lPTj0x');\n\nexport interface VSpaceGridProps {\n rows: IVSpaceProperty[],\n columns: GridColumns\n processRowUpdate: (item: IVSpaceProperty) => Promise>\n processRowDelete: (item: IVSpaceProperty) => Promise>\n processSaveAll: (items: IVSpaceProperty[]) => Promise>\n triggerRefresh: () => Promise\n userPermissionEntities?: string[]\n isAdmin: boolean\n}\n\nexport function VSpaceGrid(props: VSpaceGridProps) {\n // used to display Alert Messages on the grid\n const [alertDisplay, setAlertDisplay] = useState<{ message: string, severity: AlertColor }>();\n\n const apiRef = useGridApiRef();\n // const sortByNew: GridSortItem = { field: 'isNew', sort: 'desc' };\n const sortByDefault: GridSortItem = { field: 'instanceName', sort: 'asc' };\n // const sortByDefault: GridSortItem = { field: 'id', sort: 'asc' };\n const [sortModel, setSortModel] = useState([sortByDefault]);\n\n const [filterModel, setFilterModel] = useState({\n items: [\n { id: 1, columnField: 'instanceName', operatorValue: 'isNotEmpty', value: undefined },\n { id: 2, columnField: 'isNew', operatorValue: 'equals', value: 'true' }],\n linkOperator: GridLinkOperator.Or\n });\n\n // const [filterModel, setFilterModel] = useState({ items: [] });\n\n const handleRowEditStart = (\n params: GridRowParams,\n event: MuiEvent,\n ) => {\n event.defaultMuiPrevented = true;\n };\n\n const handleRowEditStop: GridEventListener = (\n params,\n event,\n ) => {\n event.defaultMuiPrevented = true;\n };\n\n const handleEditClick = (id: GridRowId) => (event: React.MouseEvent) => {\n event.stopPropagation();\n apiRef.current.startRowEditMode({ id });\n };\n\n const handleCloneClick = (id: GridRowId) => (event: React.MouseEvent) => {\n event.stopPropagation();\n const row = apiRef.current.getRow(id);\n let newRow = _.clone(row);\n newRow.id = randomId(); // make unique\n newRow.isNew = true;\n newRow.templateName = templateNameHardcoded;\n apiRef.current.updateRows([newRow]);\n apiRef.current.startRowEditMode({ id: newRow.id })\n };\n\n const handleSaveClick = (id: GridRowId) => async (event: React.MouseEvent) => {\n event.stopPropagation();\n await apiRef.current.stopRowEditMode({ id });\n };\n\n const handleDeleteClick = (id: GridRowId) => async (event: React.MouseEvent) => {\n event.stopPropagation();\n\n const row = apiRef.current.getRow(id);\n\n if (!row) throw new Error(`could not find row with id ${id}`)\n const response = await props.processRowDelete(row);\n console.log(response);\n if (response.isSuccessful === true) {\n console.log(`Removing row with ${id}`)\n apiRef.current.updateRows([{ id, _action: 'delete' }]);\n }\n };\n\n const handleCancelClick = (id: GridRowId) => async (event: React.MouseEvent) => {\n event.stopPropagation();\n await apiRef.current.stopRowEditMode({ id, ignoreModifications: true });\n\n const row = apiRef.current.getRow(id);\n if (row!.isNew) {\n apiRef.current.updateRows([{ id, _action: 'delete' }]);\n }\n };\n\n const processRowUpdate = async (newRow: GridRowModel) => {\n let updatedRow = _.clone(newRow);\n await props.processRowUpdate(updatedRow);\n return { ...newRow, isNew: false };\n };\n\n const checkPermission = (operatingEntity: string | undefined) => {\n if (props.isAdmin) return true;\n if (!operatingEntity) return false;\n if (!props.userPermissionEntities) return false;\n return (props.userPermissionEntities?.indexOf(operatingEntity || '') >= 0)\n };\n\n const EditToolbar = (edittoolbarprops: EditToolbarProps) => {\n const { apiRef } = edittoolbarprops;\n\n const handleAddRecordClick = () => {\n\n // show latest at top\n // setSortModel([sortByNew]);\n\n // add a row\n const id = randomId();\n let newEntry = {\n id,\n isNew: true,\n templateName: templateNameHardcoded\n }\n apiRef.current.updateRows([newEntry]);\n apiRef.current.startRowEditMode({ id });\n\n // // Wait for the grid to render with the new row\n setTimeout(() => {\n apiRef.current.scrollToIndexes({\n rowIndex: 0 // apiRef.current.getRowsCount() - 1,\n });\n apiRef.current.setCellFocus(id, 'instanceName');\n\n }, 250);\n };\n\n\n\n\n\n\n\n return (\n <>\n\n \n\n { await props.triggerRefresh(); }}\n startIcon={}\n >Refresh\n\n }\n onClick={handleAddRecordClick}>\n Add New\n \n\n\n\n {/* \n onData={(importData) => {\n // add the rows.\n importData.rows = importData.rows.map(r => {\n // id field should exist.\n // @ts-ignore\n if (r.id === undefined) throw new Error('missing id field on import');\n // @ts-ignore\n if (r.id === '') r.id = randomId();\n return r\n })\n apiRef.current.updateRows(importData.rows);\n }} /> */}\n\n {/* */}\n\n \n\n Export XLSX}>\n \n \n\n\n\n } variant=\"outlined\">Import XLSX}>\n {\n\n let importData = importDataWrongColumns.map(r => {\n let newr: IVSpaceProperty = {};\n\n Object.entries(r).forEach(([key, value]) => {\n let field = columns.filter(c => c.headerName === key)[0].field as keyof IVSpaceProperty;\n newr[field] = value;\n })\n\n return newr;\n })\n\n // try to find the matching row;\n let currentRows: IVSpaceProperty[] = Array.from(apiRef.current.getRowModels(), ([name, value]) => value);\n\n let preppedData = importData.map(importedrow => {\n let find = currentRows.filter(cr => (cr.use === importedrow.use) && (cr.instanceName === importedrow.instanceName));\n\n\n if (find && find[0] && find[0].id) {\n importedrow.id = find[0].id;\n importedrow.state = find[0].state;\n importedrow.instanceId = find[0].instanceId;\n\n // only mark as new if the data is different\n if (isDataDifferent(importedrow, find[0])) {\n importedrow.isNew = true;\n }\n\n } else {\n importedrow.id = 'generatedId' + randomId();\n importedrow.isNew = true;\n }\n\n importedrow.longitude = importedrow.longitude || 0;\n importedrow.latitude = importedrow.latitude || 0;\n\n importedrow.templateName = templateNameHardcoded;\n\n return importedrow;\n });\n\n // add the rows.\n // importData.rows = importData.rows.map(r => {\n // // id field should exist.\n // // @ts-ignore\n // if (r.id === undefined) throw new Error('missing id field on import');\n // // @ts-ignore\n // if (r.id === '') r.id = randomId();\n // return r\n // })\n\n\n console.log('preppedData', preppedData);\n\n // APPLY PERMISSION CHECKS\n let allowedRows = preppedData.filter(p => checkPermission(p.operatingEntity));\n console.log('allowedRows', allowedRows)\n\n let blockedRowCount = preppedData.length - allowedRows.length;\n if (blockedRowCount > 0) {\n setAlertDisplay({\n message: `Error. Can not import ${blockedRowCount} ${addS('row', blockedRowCount)} due to permissions. Please only import rows you have permission to edit.`,\n severity: 'error'\n });\n return;\n }\n\n if (allowedRows.length === 0) {\n setAlertDisplay({\n message: `0 rows imported. Please check your file.`,\n severity: 'error'\n }) \n return;\n }\n\n setAlertDisplay({\n message: `Success! Imported ${allowedRows.length} ${addS('row', allowedRows.length)}. Please click SAVE ALL to commit changes.`,\n severity: 'success'\n });\n\n // update rows\n setTimeout(() => {\n apiRef.current.updateRows(allowedRows);\n }, 100);\n \n\n\n\n // let currentRowsSave: IVSpaceProperty[] = Array.from(apiRef.current.getRowModels(), ([name, value]) => value);\n // await props.processSaveAll(preppedData);\n // await props.triggerRefresh();\n }} />\n \n\n\n value).filter(r => r.isNew).length > 0)}\n color={(Array.from(apiRef.current.getRowModels(), ([name, value]) => value).filter(r => r.isNew).length > 0) ? \"success\" : undefined}\n size=\"small\"\n startIcon={}\n onClick={async () => {\n let currentRows: IVSpaceProperty[] = Array.from(apiRef.current.getRowModels(), ([name, value]) => value);\n currentRows = currentRows.filter(r => r.isNew)\n await props.processSaveAll(currentRows);\n await props.triggerRefresh();\n }}>\n Save all\n \n \n \n {alertDisplay && {alertDisplay.message}}\n \n \n );\n }\n\n let modifieddata = _.clone(props.rows).map((r: any) => {\n if (!r.id) r.id = randomId();\n if (r.isNew === undefined) r.isNew = false;\n return r;\n });\n\n let cols: GridColumns = [];\n\n cols = cols.concat([{\n field: \"isNew\", headerName: \"Is New\", align: 'left',\n hide: true\n },\n {\n field: 'actions',\n type: 'actions',\n headerName: 'Actions',\n width: 100,\n cellClassName: 'actions',\n getActions: (props) => {\n const { id } = props;\n const isInEditMode = apiRef.current.getRowMode(id) === 'edit';\n let isEditable = false;\n if (checkPermission(props.row.operatingEntity)) isEditable = true;\n\n if (isInEditMode) {\n return [\n \n }\n label=\"Cancel\"\n className=\"textPrimary\"\n onClick={handleCancelClick(id)}\n color=\"info\"\n />,\n }\n label=\"Save\"\n onClick={handleSaveClick(id)}\n color=\"success\"\n />\n ,\n\n ];\n }\n\n return [\n \n \n }\n disabled={!isEditable}\n label=\"Delete\"\n onClick={handleDeleteClick(id)}\n color=\"error\"\n />\n \n ,\n\n \n \n }\n label=\"Clone\"\n disabled={!isEditable}\n className=\"textPrimary\"\n onClick={handleCloneClick(id)}\n color=\"info\"\n />\n \n ,\n\n \n \n }\n label=\"Edit\"\n className=\"textPrimary\"\n onClick={handleEditClick(id)}\n color=\"warning\"\n />\n \n ,\n\n\n\n ];\n },\n }]);\n\n cols = cols.concat(props.columns);\n let columns: GridColumns = cols;\n\n return \n {\n console.log(model);\n setFilterModel(model);\n }}\n onSortModelChange={(model, details) => {\n // let newmodel = _.clone(model);\n // newmodel.unshift(sortByNew);\n // console.log({ model, newmodel, details })\n setSortModel(model);\n }}\n // add a id\n rows={modifieddata}\n initialState={{ pinnedColumns: { left: ['actions', 'isNew', 'instanceName'] } }}\n onRowEditStart={handleRowEditStart}\n onRowEditStop={handleRowEditStop}\n processRowUpdate={processRowUpdate}\n components={{\n Toolbar: EditToolbar,\n }}\n componentsProps={{\n toolbar: { apiRef },\n }}\n experimentalFeatures={{ newEditingApi: true }}\n columns={columns}\n />\n \n}\n\n\n\nconst addS = (input: string, count: number) => {\n if (count < 2) return input;\n return `${input}s`;\n}","export class APIMapBox {\n // https://account.mapbox.com/\n access_token =\n 'pk.eyJ1IjoiaW90bnh0IiwiYSI6ImNrcmZ6bGZodDYxM3Qyd282MnRlOHk0cngifQ.BMlbTN6s8veYesYHD8C_8g';\n\n // https://docs.mapbox.com/api/search/geocoding/\n geocodeReverse = async (longitude: number, latitude: number): Promise => {\n return fetch(\n `https://api.mapbox.com/geocoding/v5/mapbox.places/${longitude},${latitude}.json?access_token=${this.access_token}&limit=1`,\n ).then(res => res.json());\n };\n\n // https://docs.mapbox.com/api/search/geocoding/#forward-geocoding\n lookupPlaceName = async (search_text:string) => {\n return fetch(\n `https://api.mapbox.com/geocoding/v5/mapbox.places/${search_text}.json?access_token=${this.access_token}&limit=1`,\n ).then(res => res.json());\n }\n\n geocodeReversePlaceName = async (longitude: number, latitude: number): Promise => {\n const result = await this.geocodeReverse(longitude,latitude);\n if (result && result.features && result.features[0] && result.features[0].place_name) return result.features[0].place_name;\n }\n}\n\nexport const apimapbox = new APIMapBox();\n\nexport interface GeocodeFeature {\n center: [number,number],\n // context: [Array],\n geometry: Geometry,\n id: string,\n place_name: string,\n place_type: [],\n properties: [],\n relevance: 1,\n text: string,\n type: string,\n}\n\nexport interface GeocodeReverseResult {\n attribution: string\n features: GeocodeFeature[]\n query: [number,number],\n type: 'FeatureCollection',\n};\n\nexport interface Geometry {\n \"type\": string,\n \"coordinates\": [number,number]\n}","export const gridStyles = {\n '& .vspacegrid.notEditable': {\n color: 'primary.main'\n }\n}","export const formatCurrency = (value: number, currency?: string) => {\n if (!currency) return value.toFixed(2);\n return value.toLocaleString('en-US', { style: 'currency', currency })\n}","// IoT.nxt\n// By Rouan van der Ende\n// Apr 2022\n\n// test with https://localhost:6001/site/12f8ea9e-f1bd-4a4e-894f-eced91d5044b\n\nimport {\n Alert,\n Box,\n Button,\n CircularProgress,\n FormControl,\n Grid,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Typography,\n Tooltip,\n LinearProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n} from '@mui/material';\nimport * as React from 'react';\n\nimport {\n Params,\n useLocation,\n useNavigate,\n useParams,\n Location as RouterLocation,\n NavigateFunction\n} from \"react-router-dom\";\n\nimport { IVSpaceProperty } from './interfaces_vspaces';\n\nimport {\n DataGridPro,\n GridColumns,\n GridEnrichedColDef,\n LicenseInfo,\n} from '@mui/x-data-grid-pro';\n\nimport { WidgetText } from '../components/widget';\n\nimport {\n DeleteTwoTone,\n HistoryTwoTone,\n RefreshTwoTone,\n SaveTwoTone,\n UndoTwoTone\n} from '@mui/icons-material';\n\nimport _ from 'lodash';\n\nimport { INode, isLatitude, isLongitude, Maps, ViewMapState } from '../components/maps';\nimport { PageView } from './page';\nimport { IToken } from '../components/utils/oauth/itoken';\nimport { APIVodafoneVSpacesAPI } from './api';\nimport { ICloudServiceActionResult } from './interfaces';\nimport { Link as RouterLink } from 'react-router-dom'\nimport { AllowedUses } from './lists_use';\nimport { APIMapBox, GeocodeReverseResult } from '../common/api_mapbox';\nimport { Countries, Regions } from './countries';\nimport clsx from 'clsx';\nimport { gridStyles } from './vspace_gridstyles';\nimport { formatCurrency } from '../components/widget/formatCurrency';\nimport { processInstanceCalculations, removeCalculations } from './vspace_calculations';\nimport { localStorageGetBoolean, localStorageSetBoolean } from '../components/utils/localstorage';\n\nimport { IAppState } from '../App';\n\nLicenseInfo.setLicenseKey('11dfa392be05d10d58887edf4f20e775T1JERVI6NDE2MjgsRVhQSVJZPTE2ODEzMzgwODU1NTIsS0VZVkVSU0lPTj0x');\n\ninterface VSpaceSiteViewProps {\n onInstanceId: (instanceId: string) => IVSpaceProperty[]\n router?: {\n location: RouterLocation\n params: Params<\"instanceId\">\n navigate: NavigateFunction\n }\n columns?: GridColumns\n token: IToken\n onClickRefresh: () => void\n appState: IAppState\n}\n\ninterface VSpaceSiteViewState {\n data?: IVSpaceProperty[]\n dataOrig?: IVSpaceProperty[]\n instanceId?: string\n\n /** when typing in a new purpose the text is kept here */\n newPurposeText?: string\n mapZoom: number\n mapViewState?: ViewMapState\n mapLongitude?: number\n mapLatitude?: number\n\n /** used to display please wait info alert */\n pleaseWait: boolean;\n /** to display success/error messages */\n lastResponses: ICloudServiceActionResult[]\n\n enableSetLocation: boolean\n mapboxReverseResult?: GeocodeReverseResult\n\n showDeleteSiteConfirmDialog: boolean\n\n /** if the site is editable or not depends on the user permissions for operating entity */\n editable?: boolean\n}\n\ninterface PivotTable {\n id: string\n headerName: string\n column?: GridEnrichedColDef\n grandTotal: number\n}\n\nconst filteredOutFields: (keyof IVSpaceProperty)[] = [\n \"id\",\n \"use\",\n \"instanceName\",\n \"latitude\",\n \"longitude\",\n \"country\",\n \"region\",\n \"currency\",\n \"city\",\n \"operatingEntity\",\n \"originalUse\",\n \"assetId\",\n \"retailId\",\n \"state\",\n \"instanceId\",\n \"templateId\",\n \"templateName\",\n \"year\",\n \"buildingArea\",\n \"numberOfBuildings\", // moved to sidebar\n \"freeHoldBuildings\", // moved to sidebar\n];\n\nclass VSpaceSiteView extends React.Component {\n state: VSpaceSiteViewState = {\n newPurposeText: '',\n mapZoom: 0,\n pleaseWait: false,\n lastResponses: [],\n enableSetLocation: false,\n mapboxReverseResult: undefined,\n showDeleteSiteConfirmDialog: false,\n editable: undefined\n }\n\n // private gridRef: any;\n // // @ts-ignore\n // constructor(props) {\n // super(props);\n // this.gridRef = React.createRef();\n // }\n\n componentDidMount = () => {\n this.getData();\n this.animatezoom();\n }\n\n animatezoom = () => {\n const zooms = [];\n for (var z = 0.1; z < 15; z += 0.1) {\n zooms.push(z);\n }\n\n zooms.forEach(z => {\n setTimeout(() => {\n this.setState({ mapZoom: z })\n }, 0 + (250 * z));\n });\n }\n\n getData = async () => {\n\n if (!this.props.router?.params.instanceId) throw Error('missing instanceId');\n\n let data: IVSpaceProperty[] = this.props.onInstanceId(this.props.router.params.instanceId);\n let latLong = this.getLatLong(data);\n\n // PERMISSIONS\n\n let editable = (data && data[0] && data[0].operatingEntity && this.props.appState.userPermissionEntities)\n ? (this.props.appState.userPermissionEntities.indexOf(data[0].operatingEntity) >= 0)\n : this.state.editable\n if (this.props.appState.simplifiedAccessRules?.isAdmin) editable = true;\n // END PERMISSIONS\n\n await this.setState({\n data,\n dataOrig: JSON.parse(JSON.stringify(data)),\n instanceId: this.props.router.params.instanceId,\n mapLatitude: latLong.latitude,\n mapLongitude: latLong.longitude,\n editable\n });\n }\n\n addUse = (use?: string) => {\n if (!use) throw new Error('need a use string to remove');\n if (!this.state.data) return;\n if (!this.state.data[0]) return;\n let newEntry: IVSpaceProperty = JSON.parse(JSON.stringify(this.state.data[0])); // deep clone\n // newEntry.id = `${newEntry.instanceId}_${use}`;\n delete newEntry.id;\n newEntry.use = use\n\n // new purpose rows should be zeroed out for the visible fields.\n Object.keys(newEntry).forEach((k) => {\n // @ts-ignore\n if (filteredOutFields.indexOf(k) === -1) newEntry[k] = 0;\n })\n\n let data = this.state.data;\n data.push(newEntry);\n\n this.setState({ data, newPurposeText: '' });\n }\n\n removeUse = async (use?: string) => {\n if (!use) throw new Error('need a use string to remove');\n if (!this.state.data) throw Error('Missing data');\n console.log(`Removing use '${use}'`)\n\n\n if (this.state.data.length === 1) {\n this.setState({ lastResponses: [{ isSuccessful: false, exceptionMessage: 'Not allowed to remove the last use. Please first add another use.' }] });\n setTimeout(() => {\n this.setState({ lastResponses: [] });\n }, 2500)\n return;\n }\n\n let data = _.clone(this.state.data);\n await this.setState({ data: undefined });\n data = data?.filter(d => d.use !== use);\n this.setState({ data });\n }\n\n getLatLong = (data: IVSpaceProperty[]): { latitude: number, longitude: number } => {\n if (!data) throw Error('missing data for coordinates');\n const longitude = this.getCoordinates(data).location.coordinates[0]\n const latitude = this.getCoordinates(data).location.coordinates[1]\n this.getMapboxLocation({ latitude, longitude });\n return { latitude, longitude }\n }\n\n getMapboxLocation = async (latlng: { latitude: number, longitude: number }) => {\n let mapboxReverseResult = await new APIMapBox().geocodeReverse(latlng.longitude, latlng.latitude);\n console.log(mapboxReverseResult);\n this.setState({ mapboxReverseResult })\n }\n\n getCoordinates = (data: IVSpaceProperty[]): INode => {\n let coordinates: [number, number] = [0, 0];\n if (!data) throw Error('missing data for coordinates');\n if (!data[0]) throw Error('missing data for coordinates');\n let d = data[0];\n if (d.latitude && d.latitude >= -90 && d.latitude <= 90) coordinates[1] = typeof d.latitude === 'string' ? parseFloat(d.latitude) : d.latitude;\n if (d.longitude && d.longitude >= -180 && d.longitude <= 180) coordinates[0] = typeof d.longitude === 'string' ? parseFloat(d.longitude) : d.longitude;\n let output = { data: d, location: { type: \"Point\", coordinates } };\n return output as INode;\n }\n\n /** prepares data for the vertical grid.\n * rows become columns and columns become rows */\n prepareGridData = () => {\n if (!this.props.columns) throw Error('Missing column data');\n if (!this.state.data) throw Error('Missing data');\n if (!this.state.data[0]) throw Error('Invalid data');\n\n let columns: GridColumns> = [];\n\n columns.unshift({\n field: 'headerName',\n headerName: ' ',\n align: 'left',\n width: 300,\n cellClassName: (params) => {\n return clsx('vspacegrid', {\n notEditable: (this.state.editable) ? (params.row?.column?.editable === false) : true,\n })\n },\n })\n\n this.state.data.map(processInstanceCalculations).forEach(d => {\n let width = 150;\n if (d.use) {\n let w = d.use.length * 20;\n if (w > width) width = w;\n }\n\n columns.push({\n field: d.use || 'not set',\n headerName: d.use,\n editable: true,\n sortable: false,\n align: 'right',\n width,\n // flex: 1,\n cellClassName: (params) => {\n return clsx('vspacegrid', {\n notEditable: (this.state.editable) ? (params.row?.column?.editable === false) : true,\n })\n },\n renderCell: (params) => {\n if (params.id === 'action') {\n return { this.removeUse(params.field); }}\n startIcon={}>Delete use;\n // return <>\n // {params.colDef.headerName}\n // \n // { this.removeUse(params.field); }}>\n // \n }\n\n if (params.row.headerName.toLowerCase().indexOf('cost') >= 0) return {formatCurrency(params.value, this.getProperty().currency)}\n\n return {params.value};\n },\n\n });\n });\n\n columns.push({\n field: 'grandTotal',\n headerName: 'Grand Total',\n editable: false,\n align: 'right',\n width: 200,\n renderCell: (params) => {\n if (params.row.headerName.toLowerCase().indexOf('cost') >= 0) return {formatCurrency(params.value, this.getProperty().currency)}\n return (params.id === 'action') ? : {params.value}\n },\n cellClassName: (params) => {\n return clsx('vspacegrid', {\n notEditable: true,\n })\n },\n })\n\n let rows: PivotTable[] = [];\n\n rows = this.props.columns.map((c, index) => {\n let newrow: PivotTable = {\n id: `${this.state.instanceId}_${index}`,\n headerName: c.headerName || 'missing',\n column: c,\n grandTotal: 0\n }\n\n this.state.data?.forEach(d => {\n // @ts-ignore\n if (d.use) {\n // @ts-ignore\n let val = d[c.field as keyof d];\n // @ts-ignore\n newrow[d.use] = val\n newrow.grandTotal += val;\n };\n })\n\n return newrow;\n })\n\n // filters out rows we dont want to edit\n rows = rows.filter(r => {\n if (!r.column) return true; // Action rows have no original column data.\n return (filteredOutFields.indexOf(r.column.field as keyof IVSpaceProperty) < 0)\n });\n\n rows = rows.sort((a, b) => a.headerName > b.headerName ? 1 : -1)\n\n // only add the action row to delete use columns if the user has edit rights\n if (this.state.editable) rows.unshift({ id: 'action', headerName: '', column: undefined, grandTotal: 0 })\n\n // // add grandTotal\n // rows = rows.map( r => {\n // console.log({r});\n // r.grandTotal = 0;\n // return r;\n // })\n\n return { rows, columns };\n }\n\n getTotalCost = (): number => {\n if (!this.state.data) throw new Error('missing data');\n let totalCost = this.state.data.map(d => {\n return (d.estateCost || 0)\n + (d.facilitiesHardCost || 0)\n + (d.facilitiesSoftCost || 0)\n + (d.utilityCost || 0);\n }).reduce((partialSum, a) => partialSum + a, 0);\n\n return totalCost;\n }\n\n /** calculate the total needed for the side panel total area required to meet group target. */\n getTotalAreaRequiredToMeetGroupTarget = (): number => {\n if (!this.state.data) throw new Error('missing data');\n\n const totalAssignedUsers = this.state.data.map(d => {\n return (d.assignedUsers || 0)\n }).reduce((partialSum, a) => partialSum + a, 0);\n\n /** formula according to Timothy word doc is total assigned users times 10 */\n const totalAreaRequiredToMeetGroupTarget = totalAssignedUsers * 10.0;\n return totalAreaRequiredToMeetGroupTarget;\n }\n\n getCostOfSurplusAreaPA = (): number => {\n const costOfSurplusAreaPA = 0;\n return costOfSurplusAreaPA;\n }\n\n getTotalOnProperty(propertyName: keyof IVSpaceProperty): number {\n if (!this.state.data) return 0;\n\n return this.state.data.map(d => {\n let val = d[propertyName];\n if (typeof val === \"number\") return val;\n return 0;\n }).reduce((partialSum, a) => partialSum + a, 0);\n }\n\n /** when grid cell changes we update the state data */\n updateValue = (update: {\n use: string,\n field: string,\n value: number\n }) => {\n if (!update) throw Error('missing update');\n if (!this.state.data) throw Error('missing state.data');\n\n let data = _.clone(this.state.data);\n\n\n data = data.map(d => {\n if (d.use === update.use) d[update.field as keyof IVSpaceProperty] = update.value as any;\n return d;\n })\n\n\n this.setState({ data });\n }\n\n undoChanges = () => {\n // write state.dataOrig into state.data\n this.setState({ data: JSON.parse(JSON.stringify(this.state.dataOrig)) }); // deep clone\n }\n\n saveChanges = async () => {\n\n\n const vspaceapi = new APIVodafoneVSpacesAPI(this.props.token);\n if (!this.props.token) throw new Error('missing token');\n if (!this.state.data) throw new Error('missing data');\n if (!this.state.dataOrig) throw new Error('missing dataOrig');\n\n this.setState({ pleaseWait: true });\n // compare dataOrig to data and remove uses if needed\n let dataOrigUses = this.state.dataOrig.map(d => d.use).sort((a, b) => ((a || '') > (b || '')) ? 1 : -1);\n let dataUses = this.state.data.map(d => d.use).sort((a, b) => ((a || '') > (b || '')) ? 1 : -1);\n let deletedUses = dataOrigUses.filter(d => dataUses.indexOf(d) < 0)\n let deletedInstances = deletedUses.map(d => {\n if (!this.state.dataOrig) throw Error('missing dataOrig for removing')\n return this.state.dataOrig.filter(o => o.use === d)[0]\n })\n console.log(deletedInstances);\n\n let deleteTasks = deletedInstances.map(d => vspaceapi.api.v1.VSpacesDigitwin.RemoveInstance(d));\n let deleteResults = await Promise.all(deleteTasks);\n this.setState({ lastResponses: deleteResults, pleaseWait: false });\n\n\n\n let instancesToAddOrUpdate = this.state.data.filter(d => {\n console.log('checking for diff');\n if (!this.state.dataOrig) throw new Error('missing dataOrig to check changes');\n console.log('filtering');\n let orig = this.state.dataOrig.filter(o => o.use === d.use);\n console.log(1);\n if (orig.length === 0) return true; // its new so we will add it.\n console.log(2);\n\n // did exist before so check if it changed.\n if (orig[0]) return (JSON.stringify(orig[0]) !== JSON.stringify(d));\n console.log(3);\n return false;\n })\n console.log(4);\n console.log({ instancesToAddOrUpdate });\n if (instancesToAddOrUpdate.length !== 0) {\n this.setState({ pleaseWait: true });\n let tasks = instancesToAddOrUpdate.map(d => vspaceapi.api.v1.VSpacesDigitwin.AddOrUpdateInstance(removeCalculations(d)));\n // let result = await vspaceapi.api.v1.VSpacesDigitwin.AddOrUpdateManyInstances(this.state.data);\n let result = await Promise.all(tasks);\n this.setState({ pleaseWait: false, lastResponses: deleteResults.concat(result) });\n }\n\n await this.refresh();\n }\n\n /** returns true if changes were made that can be saved */\n wasThereChanges = (): boolean => {\n if (!this.state.data) return false;\n if (!this.state.dataOrig) return false;\n let dataChanged = (JSON.stringify(this.state.data) !== JSON.stringify(this.state.dataOrig));\n return dataChanged;\n }\n\n getListOfUsesCurrentUses = (): string[] => {\n if (!this.state.data) return [];\n let currentUses = this.state.data.map(d => d.use || '');\n return currentUses;\n }\n\n currentlyInUseForPurpose = (useToCheck: string): boolean => {\n let currentUses = this.getListOfUsesCurrentUses();\n return (currentUses.indexOf(useToCheck) >= 0);\n }\n\n setLocation = (newLocation: { latitude: number, longitude: number }) => {\n if (!newLocation) throw Error('expected new location data')\n let data = this.state.data;\n if (!data) throw new Error('missing data');\n\n data = data.map(d => {\n // sets the data locations to the current mapView location.\n if (newLocation) {\n d.longitude = newLocation.longitude;\n d.latitude = newLocation.latitude;\n }\n return d;\n })\n\n this.setState({\n data,\n mapLongitude: newLocation.longitude,\n mapLatitude: newLocation.latitude\n });\n }\n\n setProperty = (newValues: Partial) => {\n if (!newValues) throw Error('expected new location data')\n let data = this.state.data;\n if (!data) throw new Error('missing data');\n data = data.map(d => {\n return { ...d, ...newValues };\n })\n\n let mapLongitude = this.state.mapLongitude;\n let mapLatitude = this.state.mapLatitude;\n\n if (newValues.longitude !== undefined && isLongitude(newValues.longitude)) mapLongitude = newValues.longitude;\n if (newValues.latitude !== undefined && isLatitude(newValues.latitude)) mapLatitude = newValues.latitude;\n\n this.setState({ data, mapLongitude, mapLatitude });\n }\n\n refresh = async () => {\n this.setState({ pleaseWait: true, lastResponses: [] });\n await this.props.onClickRefresh();\n await delay(100); // wait for parent to render props\n await this.getData();\n this.setState({ pleaseWait: false })\n }\n\n getProperty = () => {\n if (!this.state.data) throw new Error('Missing property data');\n return this.state.data[0]; // all property values should be the same...\n }\n\n deleteSite = async () => {\n console.log('delete site...');\n const vspaceapi = new APIVodafoneVSpacesAPI(this.props.token);\n if (!this.state.dataOrig) return;\n\n let deleteTasks = this.state.dataOrig.map(d => vspaceapi.api.v1.VSpacesDigitwin.RemoveInstance(d));\n let deleteResults = await Promise.all(deleteTasks);\n this.setState({ lastResponses: deleteResults, pleaseWait: false });\n\n this.props.router?.navigate('/');\n }\n\n render() {\n\n // uncomment to reset the siteviewtip\n // localStorageSetBoolean('showSiteViewTip', true);\n\n if (!this.state.data) return \n if (!this.props.columns) return Missing column data\n if (!this.state.data[0]) return Invalid data\n\n let property = this.getProperty();\n\n let { rows, columns } = this.prepareGridData();\n\n if (!rows) return \n if (!columns) return \n\n let changes = this.wasThereChanges();\n\n return (\n\n {/* DELETE SITE START */}\n {this.state.editable &&\n { this.setState({ showDeleteSiteConfirmDialog: true }) }}\n startIcon={}\n >\n DELETE SITE\n \n }\n\n { this.setState({ showDeleteSiteConfirmDialog: false }); }}>\n Delete site?\n \n \n Are you sure you want to delete {this.getProperty().instanceName} completely?\n \n \n \n }\n variant=\"outlined\"\n onClick={() => { this.setState({ showDeleteSiteConfirmDialog: false }); }}>\n CANCEL\n }\n color=\"error\"\n variant='outlined'\n onClick={() => { this.deleteSite(); }} autoFocus>\n CONFIRM DELETE SITE\n \n \n \n {/* DELETE SITE END */}\n\n { this.refresh(); }}\n startIcon={}>\n REFRESH\n \n }\n sx={{ mr: 1 }}\n component={RouterLink}\n to={`/history/${property.instanceId}`}\n variant=\"outlined\" size=\"small\">VIEW HISTORY\n {this.state.editable && <>\n }\n sx={{ mr: 1 }}\n variant=\"outlined\" size=\"small\" onClick={() => {\n this.undoChanges();\n }}>UNDO\n }\n variant=\"outlined\" size=\"small\" onClick={() => {\n this.saveChanges();\n }}>SAVE CHANGES\n }\n }\n >\n\n\n \n \n \n \n \n\n {/* \n {\n if (!this.state.data) throw new Error('missing data');\n this.setState({\n mapLatitude: this.getLatLong(this.state.data).latitude,\n mapLongitude: this.getLatLong(this.state.data).longitude\n })\n }}>Center View\n */}\n\n \n mapboxApiAccessToken={'pk.eyJ1IjoiaW90bnh0IiwiYSI6ImNsMXE0YXFoZjExNjYzZXBkY3l1Mms5NzEifQ._1ILYjgYE380E5YsUGGoiw'}\n height={300}\n showCluster={false}\n disabled={!this.state.editable}\n enableMapStyleToggle={true}\n // mapStyleToggle={this.state.mapStyleToggle}\n onClick={(info) => {\n\n if (!this.state.editable) return; // do nothing on clicks\n\n if (info.picked === false && info.coordinate) {\n let location = { latitude: info.coordinate[1], longitude: info.coordinate[0] }\n this.setLocation(location);\n this.getMapboxLocation(location);\n }\n }}\n onHover={(mapHoverItem) => {\n // this.setState({ mapHoverItem });\n }}\n initialViewState={{\n longitude: this.state.mapLongitude,\n latitude: this.state.mapLatitude,\n zoom: this.state.mapZoom,\n pitch: 0,\n bearing: 0\n }}\n listOfNodes={[this.getCoordinates(this.state.data)]}\n onViewStateChange={(data) => {\n if (!this.state.editable) return; // do nothing on clicks\n\n if (data.viewState) {\n this.setState({\n mapViewState: data.viewState,\n mapZoom: data.viewState.zoom,\n mapLatitude: data.viewState.latitude,\n mapLongitude: data.viewState.longitude\n });\n }\n }}\n />\n \n \n \n \n\n \n {!this.state.mapboxReverseResult && }\n {this.state.mapboxReverseResult && this.state.mapboxReverseResult.features.length === 0 && Could not look up location data.}\n {this.state.mapboxReverseResult && this.state.mapboxReverseResult.features && this.state.mapboxReverseResult.features[0] &&\n \n {this.state.mapboxReverseResult?.features[0].place_name}\n \n }\n \n\n\n\n \n \n\n \n {\n let latitude = parseFloat(e.target.value);\n if (latitude && !isNaN(latitude) && e.target.value) this.setProperty({ latitude })\n }} />\n \n \n {\n let longitude = parseFloat(e.target.value);\n if (longitude && !isNaN(longitude) && e.target.value) this.setProperty({ longitude })\n }} />\n \n\n \n \n \n\n \n { this.setProperty({ city: e.target.value }); }}\n />\n \n\n \n { this.setProperty({ country: e.target.value }); }}\n valueOptions={Countries.map(c => c.name)}\n />\n \n\n \n { this.setProperty({ region: e.target.value }); }}\n valueOptions={Regions.map(r => r.name)}\n />\n \n\n \n { this.setProperty({ buildingArea: e.target.value }) }}\n />\n \n\n \n { this.setProperty({ assetId: e.target.value }) }}\n />\n \n \n c.currency.code)).sort((a, b) => a > b ? 1 : -1)}\n onChange={(e) => { this.setProperty({ currency: e.target.value }); }}\n />\n \n\n \n { this.setProperty({ numberOfBuildings: e.target.value }) }}\n />\n \n \n { this.setProperty({ freeHoldBuildings: e.target.value }) }}\n />\n \n\n \n \n \n\n {/* \n \n \n \n \n */}\n\n \n \n\n \n\n \n\n\n\n\n\n\n \n\n {this.state.editable &&\n \n\n {this.state.editable ?\n Permissions: view, edit & delete\n : Permissions: view only\n }\n\n\n \n \n \n \n Add new purpose\n {\n // this.setState({ newPurposeText: e.target.value });\n this.addUse(e.target.value);\n }}\n label=\"Add new purpose\"\n >\n \n {AllowedUses.map(u => {u})}\n \n \n \n \n \n }\n\n \n\n {(localStorageGetBoolean('showSiteViewTip', true) && this.state.editable) && {\n localStorageSetBoolean('showSiteViewTip', false);\n this.setState({});\n }}\n severity=\"info\"\n >Tip: To edit values select a cell and press enter or double click. Use the [Save Changes] button if you are happy with your changes.}\n\n >\n density='compact'\n columns={columns}\n hideFooter\n // headerHeight={0}\n rows={rows}\n disableColumnReorder\n showColumnRightBorder={false}\n disableChildrenFiltering\n disableChildrenSorting\n disableColumnFilter\n disableMultipleSelection\n disableColumnMenu\n // disableColumnPinning\n // disableRowGrouping\n disableSelectionOnClick\n autoHeight\n editMode='cell'\n // ref={this.gridRef}\n // experimentalFeatures={{ newEditingApi: true }}\n isCellEditable={(params) => {\n\n if (!this.state.editable) return false;\n\n if (params.row.column?.editable === false) return false;\n return (params.id !== 'action')\n }}\n isRowSelectable={(params) => {\n if (params.row?.column?.editable === false) return false;\n return (params.id !== 'action')\n }}\n onCellEditStart={() => {\n console.log('Press enter to commit changes')\n }}\n // https://mui.com/x/react-data-grid/editing/#events\n onCellEditCommit={(params: any, event: any) => {\n if (event.key !== 'Enter') {\n let value = parseFloat(params.value);\n\n if (isNaN(value)) {\n event.defaultMuiPrevented = true;\n return;\n }\n\n if (!params.row.column) {\n event.defaultMuiPrevented = true;\n return;\n }\n\n this.updateValue({\n use: params.field,\n field: params.row.column.field,\n value\n })\n }\n }}\n\n onCellEditStop={(params, event: any, details) => {\n let value = parseFloat(event.target.value);\n if (isNaN(value)) return;\n if (!params.row.column) return;\n this.updateValue({\n use: params.field,\n field: params.row.column.field,\n value\n })\n\n }}\n />\n\n\n\n \n\n\n\n \n \n\n );\n }\n}\n\n\nexport default function VSpaceSiteViewRoute(props: VSpaceSiteViewProps) {\n let params = useParams<\"instanceId\">();\n let location = useLocation();\n let navigate = useNavigate();\n\n if (!params.instanceId) return Missing instanceId\n\n return \n}\n\n\n\n\nexport function delay(time: number) {\n return new Promise(resolve => {\n setTimeout(() => {\n resolve(undefined);\n }, time);\n })\n}\n","\nimport * as React from 'react';\n\nimport {\n Box,\n Grid,\n Paper,\n Select,\n TextField,\n Typography,\n MenuItem,\n FormControl,\n InputLabel,\n IconButton,\n Button\n} from '@mui/material';\n\nimport { Countries, isCountryInRegionCode, Regions } from './countries';\nimport { listOfOperatingEntities } from './list_operatingEntities';\nimport { AllowedUses } from './lists_use';\nimport { CloseTwoTone } from '@mui/icons-material';\n\ninterface IFilterCriteriaProps {\n sx?: any\n /** let parent know of filter changes that need to be applied */\n onFilterChange: (options: IFilterCriteriaState) => void\n}\n\nexport interface IFilterCriteriaState {\n region: string\n country: string\n city: string\n instanceName: string\n operatingEntity: string\n use: string\n}\n\nexport class FilterCriteria extends React.Component {\n state: IFilterCriteriaState = {\n region: '',\n country: '',\n city: '',\n instanceName: '',\n operatingEntity: '',\n use: ''\n }\n\n getListOfOperatingEntities = () => {\n return listOfOperatingEntities\n // add list of countries.\n // if a country is selected we add that to the list of operating entities\n // if only a region is selected we add only those countries to the list.\n .concat(this.state.country\n ? [this.state.country]\n : Countries.map(c => c.name).filter(r => this.state.region\n ? isCountryInRegionCode(r, this.state.region)\n : true\n ))\n }\n\n setRegion = async (region: string) => {\n // if the region stays the same do nothing.\n if (region === this.state.region) return;\n // if the region changes we clear the selected country aswell.\n await this.setState({ region, country: '' });\n // if selected operating entity is no longer valid then clear it.\n if (this.getListOfOperatingEntities().indexOf(this.state.operatingEntity) < 0) await this.setState({ operatingEntity: '' });\n // let parent know of filter changes.\n this.props.onFilterChange(this.state);\n }\n\n setCountry = async (country: string) => {\n // if the country stays the same do nothing.\n if (country === this.state.country) return;\n await this.setState({ country: country });\n // if selected operating entity is no longer valid then clear it.\n if (this.getListOfOperatingEntities().indexOf(this.state.operatingEntity) < 0) await this.setState({ operatingEntity: '' })\n // let parent know of filter changes.\n this.props.onFilterChange(this.state);\n }\n\n setCityName = async (city: string) => {\n await this.setState({ city });\n this.props.onFilterChange(this.state);\n }\n\n setOperatingEntity = async (operatingEntity: string) => {\n await this.setState({ operatingEntity });\n this.props.onFilterChange(this.state);\n }\n\n setUsePurpose = async (use: string) => {\n await this.setState({ use });\n this.props.onFilterChange(this.state);\n }\n\n setInstanceName = async (instanceName: string) => {\n await this.setState({ instanceName });\n this.props.onFilterChange(this.state);\n }\n\n renderContent = () => {\n return \n \n { this.setInstanceName(e.target.value); }}\n />\n \n { this.setInstanceName(''); }}>\n \n \n \n \n\n\n \n \n Region\n { this.setRegion(e.target.value); }}\n >\n {Regions.map(r => {r.name})}\n \n \n \n { this.setRegion(''); }}>\n \n \n \n \n\n \n \n Country\n { this.setCountry(e.target.value); }}\n >\n {Countries.filter(c => (this.state.region ? (c.region === this.state.region) : true)).map(c => c.name).map(u => {u})}\n \n \n \n { this.setCountry(''); }}>\n \n \n \n \n\n \n { this.setCityName(e.target.value); }}\n />\n \n { this.setCityName(''); }}>\n \n \n \n \n\n \n \n Operating Entity\n { this.setOperatingEntity(e.target.value); }}\n >\n {this.getListOfOperatingEntities().map(r => {r})}\n \n \n \n { this.setOperatingEntity(''); }}>\n \n \n \n \n\n \n \n Use/Purpose\n { this.setUsePurpose(e.target.value); }}\n >\n {AllowedUses.map(r => {r})}\n \n \n \n { this.setUsePurpose(''); }}>\n \n \n \n \n\n\n\n \n }\n\n render() {\n return (\n \n \n \n Filter Criteria\n \n \n \n\n {this.renderContent()}\n \n \n );\n }\n}\n","\n\n\nimport _ from 'lodash';\nimport * as React from 'react';\nimport {\n Link as RouterLink,\n NavigateFunction,\n Route,\n Routes,\n useNavigate\n} from 'react-router-dom';\n\nimport {\n Alert,\n Box,\n Button,\n CircularProgress,\n FormControlLabel,\n Paper,\n Switch,\n Tooltip,\n Typography\n} from '@mui/material';\n\n\nimport {\n EntityAccessGroupsPage,\n IMapBounds,\n INode,\n IToken,\n Maps,\n PickInfo,\n ProfileDisplay,\n UsersDisplay\n} from '../components';\n\nimport { APIVodafoneVSpacesAPI } from './api';\nimport { ICloudServiceActionResult, ICloudServiceActionResultPaged } from './interfaces';\nimport { IVSpaceProperty } from './interfaces_vspaces';\nimport { PageView } from './page';\nimport { VSpaceHistoryMostRecent } from './vspace_historyMostRecent';\nimport { VSpaceGrid } from './vspace_grid';\nimport { AllowedUses } from './lists_use';\n// import { vspaceproddata } from './proddata_2022_04_07';\nimport VSpaceSiteView from './vspace_siteview';\nimport { GridColumns } from '@mui/x-data-grid-pro';\nimport VSpaceHistoryRoute, { VSpaceHistory } from './vspace_history';\nimport { Countries, findCountryGPS, findRegionGPS, regionCodeToName } from './countries';\nimport { allowedOperatingEntities } from './list_operatingEntities';\nimport { LinkTwoTone, SaveAsTwoTone } from '@mui/icons-material';\nimport { FilterCriteria, IFilterCriteriaState } from './filterCriteria';\nimport { InitialViewStateProps } from \"@deck.gl/core/lib/deck\"\nimport { processInstanceCalculations } from './vspace_calculations';\nimport clsx from 'clsx';\nimport { gridStyles } from './vspace_gridstyles';\nimport { formatCurrency } from '../components/widget/formatCurrency';\nimport { localStorageGetBoolean, localStorageSetBoolean } from '../components/utils/localstorage';\nimport { IAppState } from '../App';\ninterface VSpaceMainProps {\n token: IToken;\n router?: {\n navigate: NavigateFunction\n }\n appState: IAppState\n}\n\ninterface VSpaceMainState {\n digitwinInstances?: ICloudServiceActionResultPaged\n columns?: GridColumns;\n mapHoverItem?: IVSpaceProperty;\n mapClickedEvent?: PickInfo>;\n mapBounds?: IMapBounds\n lastResponses: ICloudServiceActionResult[]\n pleaseWait?: boolean\n showTable: boolean\n filterCriteria?: IFilterCriteriaState,\n /** control the map view */\n initialViewState?: InitialViewStateProps\n enableFilterToMapBounds: boolean\n\n /** used with user permissions on operating entities, will only show what they are allowed to edit */\n showOnlyEditable: boolean\n}\n\nexport const templateNameHardcoded = \"V-Space Site\";\n\nexport const defaultInitialViewState = {\n longitude: 0,\n latitude: 10,\n zoom: 1,\n pitch: 0,\n bearing: 0\n}\n\n/** TODO, get this from the backend instead when ready */\n// export const userPermissionEntities = [\n// \"VOIS\", \"South Africa\"\n// ]\n\nexport class VSpaceMainClass extends React.Component {\n state: VSpaceMainState = {\n lastResponses: [],\n showTable: localStorageGetBoolean('showTable', false),\n showOnlyEditable: localStorageGetBoolean('showOnlyEditable', false),\n enableFilterToMapBounds: localStorageGetBoolean('enableFilterToMapBounds', false),\n initialViewState: defaultInitialViewState\n }\n\n api: APIVodafoneVSpacesAPI = new APIVodafoneVSpacesAPI();\n map?: Maps;\n\n componentDidMount = async () => {\n if (this.props.token) this.api.authorization = `${this.props.token.token_type} ${this.props.token.access_token}`;\n this.getData().then(r => {\n console.log(\"Get Data Completed \" + r !== undefined);\n });\n }\n\n getData = async () => {\n // uncomment to use server\n this.setState({ pleaseWait: true });\n\n let digitwinInstances = await this.api.api.v1.VSpacesDigitwin\n .GetPagedDigitwinInstances(\n {\n \"orderByQuery\": \"\",\n \"pageNumber\": 1,\n \"pageSize\": 100000,\n \"selectQuery\": \"\",\n \"whereQuery\": {}\n }\n );\n // let digitwinInstances = vspaceproddata; // prod data to test\n\n if (!digitwinInstances.data) {\n this.setState({ digitwinInstances, pleaseWait: false }); return;\n }\n\n // set lat long to 0,0 if no data.\n digitwinInstances.data = digitwinInstances.data.map(processInstanceCalculations);\n\n let columns: GridColumns = [\n {\n field: \"id\",\n headerName: \"Id\",\n hide: true\n },\n {\n editable: true,\n field: \"instanceName\",\n headerName: \"Name\",\n headerClassName: 'super-app-theme--header',\n align: 'left',\n width: 350,\n renderCell: (props) => {\n if (props.row.isNew) return ;\n return \n \n \n }\n },\n {\n editable: true,\n field: \"use\",\n headerName: \"Use\",\n headerClassName: 'super-app-theme--header',\n type: \"singleSelect\",\n valueOptions: AllowedUses,\n // required: true\n },\n {\n editable: true,\n field: \"numberOfBuildings\",\n headerClassName: 'super-app-theme--header',\n headerName: \"Number of Buildings\",\n type: 'number',\n },\n {\n editable: true,\n field: \"country\",\n headerClassName: 'super-app-theme--header',\n headerName: \"Country\",\n type: \"singleSelect\",\n valueOptions: Countries.map(c => c.name)\n // valueSetter: (params) => {\n // let find = Countries.filter( c => c.name === params.value)\n // if (!find || !find[0]) return { ...params.row };\n // return { ...params.row, currency: find[0].currency.code }\n // }\n // required: true\n },\n {\n editable: true,\n field: \"region\",\n headerName: \"Region\",\n // type: \"singleSelect\",\n // valueOptions: Regions.map( r => r.name)\n },\n {\n editable: true,\n field: \"currency\",\n headerName: \"Currency\",\n type: \"singleSelect\",\n valueOptions: _.uniq(Countries.map(c => c.currency.code)).sort((a, b) => a > b ? 1 : -1),\n valueGetter: (params) => {\n let find = Countries.filter(c => c.name === params.row.country)\n if (!find || !find[0]) return;\n return find[0].currency.code\n }\n },\n {\n editable: true,\n field: \"city\",\n headerName: \"City\",\n // type: \"singleSelect\",\n // valueOptions: enumList_city\n },\n\n {\n editable: true,\n field: \"operatingEntity\",\n headerName: \"Operating Entity\",\n type: \"singleSelect\",\n valueOptions: allowedOperatingEntities,\n width: 150\n },\n\n {\n editable: true,\n field: \"originalUse\",\n headerName: \"Original Use\",\n // type: \"singleSelect\", \n // valueOptions: enumList_originalUse\n },\n {\n editable: true,\n field: \"latitude\",\n headerName: \"Latitude\"\n },\n {\n editable: true,\n field: \"longitude\",\n headerName: \"Longitude\"\n },\n {\n editable: true,\n field: \"assetId\",\n headerName: \"Asset ID\"\n },\n {\n editable: true,\n field: \"freeHoldBuildings\",\n headerName: \"Freehold Buildings\"\n },\n {\n editable: true,\n field: \"buildingArea\",\n headerName: \"Building Area\"\n },\n\n {\n editable: true,\n field: \"actualUsers\",\n headerName: \"Actual Users\"\n },\n {\n editable: true,\n field: \"areaOccupiedByTech\",\n headerName: \"Area Occupied By Tech\"\n },\n {\n editable: true,\n field: \"assignedUsers\",\n headerName: \"Assigned Users\"\n },\n {\n editable: true,\n field: \"energyConsumed\",\n headerName: \"Energy Consumed\"\n },\n {\n editable: true,\n field: \"estateCost\",\n headerName: \"Estate Cost\"\n },\n {\n editable: true,\n field: \"facilitiesHardCost\",\n headerName: \"Facilities Hard Cost\"\n },\n {\n editable: true,\n field: \"facilitiesSoftCost\",\n headerName: \"Facilities Soft Cost\"\n },\n\n {\n editable: true,\n field: \"peakOccupancyWeekday\",\n headerName: \"Peak Occupancy Weekday\"\n },\n {\n editable: true,\n field: \"peakOccupancyWeekend\",\n headerName: \"Peak Occupancy Weekend\"\n },\n {\n editable: true,\n field: \"retailId\",\n headerName: \"Retail ID\"\n },\n {\n editable: true,\n field: \"retailRevenue\",\n headerName: \"Retail Revenue\"\n },\n {\n editable: true,\n field: \"techRoomArea\",\n headerName: \"Tech Room Area\"\n },\n {\n editable: true,\n field: \"utilityCost\",\n headerName: \"Utility Cost\",\n },\n {\n editable: true,\n field: \"utilizedArea\",\n headerName: \"Utilized Area\"\n },\n {\n editable: true,\n field: \"workstations\",\n headerName: \"Workstations\"\n },\n {\n editable: true,\n field: \"year\",\n headerName: \"Year\"\n },\n { field: \"templateName\", headerName: \"Template Name\", hide: true },\n { field: \"instanceId\", headerName: \"InstanceId\", hide: true },\n { field: \"templateId\", headerName: \"TemplateId\", hide: true },\n { field: \"state\", headerName: \"State\", hide: true },\n {\n field: \"calculatedAreaRequiredToMeetGroupTarget\",\n headerName: \"Area Required To Meet Group Target\",\n editable: false,\n align: 'right',\n width: 200,\n cellClassName: (params) => {\n return clsx('vspacegrid', {\n notEditable: (params.isEditable === false)\n })\n }\n },\n {\n field: 'calculatedTotalCost',\n headerName: 'Total Cost',\n editable: false,\n align: 'right',\n width: 200,\n cellClassName: (params) => {\n return clsx('vspacegrid', {\n notEditable: (params.isEditable === false)\n })\n },\n renderCell: (params) => {\n return {formatCurrency(params.value, params.row.currency)}\n }\n },\n {\n field: 'calculatedCostPerSQM',\n headerName: 'Cost per sqm',\n editable: false,\n align: 'right',\n width: 200,\n cellClassName: (params) => {\n return clsx('vspacegrid', {\n notEditable: (params.isEditable === false)\n })\n },\n renderCell: (params) => {\n return {formatCurrency(params.value, params.row.currency)}\n }\n },\n {\n field: 'calculatedCostOfSurplusAreaPA',\n headerName: 'Cost of surplus area p.a.',\n editable: false,\n align: 'right',\n width: 200,\n cellClassName: (params) => {\n return clsx('vspacegrid', {\n notEditable: (params.isEditable === false)\n })\n },\n renderCell: (params) => {\n return {formatCurrency(params.value, params.row.currency)}\n }\n }\n ]\n\n await this.setState({ digitwinInstances, columns, pleaseWait: false });\n }\n\n render() {\n if (!this.state.digitwinInstances) return \n\n if (!this.props.appState.appsettings?.nodeapisettings) return \n\n return (<>\n \n {this.renderMain()}} />\n\n\n {\n await this.getData();\n }}\n token={this.props.token}\n columns={this.state.columns}\n onInstanceId={(instanceId) => {\n if (!this.state.digitwinInstances?.data) throw new Error('missing instance Id');\n return this.state.digitwinInstances.data.filter(d => d.instanceId === instanceId);\n }} />} />\n\n }\n />\n } />\n } />\n } />\n } />\n all} />\n \n )\n }\n\n addResponseMessage = (entry: ICloudServiceActionResult) => {\n // changed to only show one response message.\n let lastResponses: ICloudServiceActionResult[] = []; //this.state.lastResponses;\n lastResponses.push(entry);\n this.setState({ lastResponses });\n setTimeout(() => {\n lastResponses.shift();\n this.setState({ lastResponses: [] })\n }, 1000);\n }\n\n applyFilterCriteria = (row: IVSpaceProperty): boolean => {\n\n if (this.state.showOnlyEditable && this.props.appState.userPermissionEntities) {\n if (this.props.appState.simplifiedAccessRules?.isAdmin) {\n // return true;\n } else {\n if (this.props.appState.userPermissionEntities.indexOf(row.operatingEntity || '') < 0) return false;\n }\n }\n\n // map bounds\n if (this.state.enableFilterToMapBounds && this.state.mapBounds && row.latitude !== undefined && row.longitude !== undefined) {\n if (row.latitude > this.state.mapBounds.nw.latitude) return false;\n if (row.latitude < this.state.mapBounds.se.latitude) return false;\n if (row.longitude < this.state.mapBounds.nw.longitude) return false;\n if (row.longitude > this.state.mapBounds.se.longitude) return false;\n }\n\n if (!this.state.filterCriteria) return true;\n\n if (this.state.filterCriteria.region) {\n // check row region\n let regionName = regionCodeToName(this.state.filterCriteria.region);\n if (row.region?.toLowerCase() !== regionName.toLocaleLowerCase()) return false;\n }\n\n if (this.state.filterCriteria.country) {\n if (row.country !== this.state.filterCriteria.country) return false;\n }\n\n if (this.state.filterCriteria.city) {\n if (!row.city) return false;\n if (row.city.toLowerCase().indexOf(this.state.filterCriteria.city.toLowerCase()) < 0) return false;\n }\n\n if (this.state.filterCriteria.operatingEntity) {\n if (!row.operatingEntity) return false;\n if (row.operatingEntity !== this.state.filterCriteria.operatingEntity) return false;\n }\n\n if (this.state.filterCriteria.use) {\n if (!row.use) return false;\n if (row.use !== this.state.filterCriteria.use) return false;\n }\n\n if (this.state.filterCriteria.instanceName) {\n if (!row.instanceName) return false;\n if (row.instanceName.toLowerCase().indexOf(this.state.filterCriteria.instanceName.toLowerCase()) < 0) return false;\n }\n\n\n\n return true;\n }\n\n goToNewFilterCriteriaOnMap = async (filterCriteria: IFilterCriteriaState) => {\n\n console.log(filterCriteria);\n\n this.setState({ showTable: true });\n\n if (this.map && filterCriteria.region === '') {\n this.map.goToNewLocation(defaultInitialViewState)\n }\n\n if (this.map && filterCriteria.region && !filterCriteria.country) {\n let regionGPS = findRegionGPS(filterCriteria.region);\n if (!regionGPS) return;\n this.map.goToNewLocation(regionGPS.viewState)\n }\n\n // use mapbox api to find the GPS coordinates for the selected region/country/city\n let countryGps = findCountryGPS(filterCriteria.country);\n\n if (this.map && countryGps && countryGps.latitude && countryGps.longitude) {\n this.map.goToNewLocation({\n longitude: countryGps.longitude,\n latitude: countryGps.latitude,\n zoom: 5,\n pitch: 0,\n bearing: 0\n });\n }\n // let mapboxReverseResult = await new APIMapBox().lookupPlaceName(`${filterCriteria.country}, ${regionCodeToName(filterCriteria.region)}`)\n }\n\n sortInstances = (a: IVSpaceProperty, b: IVSpaceProperty) => {\n return ((a.instanceName || '') > (b.instanceName || '')) ? 1 : -1;\n }\n\n renderMain() {\n if (!this.state.digitwinInstances) return \n\n if (!this.state.digitwinInstances.isSuccessful || !this.state.digitwinInstances.data) {\n return \n {this.state.digitwinInstances.message} {this.state.digitwinInstances.exceptionMessage}\n \n }\n\n let rows = this.state.digitwinInstances.data.map(processInstanceCalculations).filter(this.applyFilterCriteria);\n\n if (!this.state.columns) return Missing column data\n\n let columns = this.state.columns;\n\n return \n \n\n {\n await this.setState({ filterCriteria });\n await this.goToNewFilterCriteriaOnMap(filterCriteria);\n }} />\n\n\n \n \n \n\n\n\n \n ref={(el) => {\n if (el) this.map = el;\n }}\n enableMapStyleToggle\n showCluster\n mapboxApiAccessToken={'pk.eyJ1IjoiaW90bnh0IiwiYSI6ImNsMXE0YXFoZjExNjYzZXBkY3l1Mms5NzEifQ._1ILYjgYE380E5YsUGGoiw'}\n height={'100%'}\n onClick={(info) => {\n console.log(info);\n if (info) this.setState({ mapClickedEvent: info });\n\n let ob = info.object as any;\n if (!ob) return;\n if (!ob.cluster) {\n console.log('clicked on an instance')\n console.log({ ob });\n if (!ob.data) return;\n let instance: IVSpaceProperty = ob.data;\n if (this.props.router?.navigate) this.props.router.navigate(`/site/${instance.instanceId}`)\n }\n }}\n onHover={(mapHoverItem: IVSpaceProperty) => { this.setState({ mapHoverItem }); }}\n initialViewState={this.state.initialViewState}\n onViewStateChange={(data) => {\n // console.log('bounds', data.bounds)\n this.setState({ mapBounds: data.bounds });\n }}\n\n listOfNodes={rows.map(d => {\n let coordinates: [number, number] = [0, 0];\n if (d.latitude && d.latitude >= -90 && d.latitude <= 90) coordinates[1] = d.latitude;\n if (d.longitude && d.longitude >= -180 && d.longitude <= 180) coordinates[0] = d.longitude;\n return { data: d, location: { type: \"Point\", coordinates } };\n })} />\n\n \n \n\n \n\n \n {\n const showOnlyEditable = !this.state.showOnlyEditable;\n localStorageSetBoolean('showOnlyEditable', showOnlyEditable);\n this.setState({ showOnlyEditable });\n }} />} label='Show only editable' />\n \n\n {\n const showTable = !this.state.showTable;\n localStorageSetBoolean('showTable', showTable);\n this.setState({ showTable });\n }} />} label='View Site details' />\n\n {\n const enableFilterToMapBounds = !this.state.enableFilterToMapBounds;\n localStorageSetBoolean('enableFilterToMapBounds', enableFilterToMapBounds);\n this.setState({ enableFilterToMapBounds })\n }} />} label='Only list within map bounds' />\n \n\n {this.state.showTable && \n \n\n {this.state.pleaseWait && Please Wait...}\n\n {this.state.lastResponses && this.state.lastResponses.map((r, i) => {r.exceptionMessage || r.message})}\n\n {\n this.getData().then(r => {\n console.log(\"Get Data Completed \" + r !== undefined);\n });\n }}\n processRowUpdate={async (item) => {\n\n let prepItem = _.clone(item);\n\n if (prepItem.isNew) {\n delete prepItem.id; // we need to send a row without an id else the server complains.\n delete prepItem.isNew;\n }\n\n this.setState({ pleaseWait: true });\n prepItem.templateName = templateNameHardcoded;\n const response = await this.api.api.v1.VSpacesDigitwin.AddOrUpdateInstance(prepItem);\n if (response.isSuccessful) {\n if (response.data) {\n await this.AddOrUpdateInstanceLocal(response.data);\n } else {\n await this.getData();\n }\n }\n this.addResponseMessage(response);\n this.setState({ pleaseWait: false }); // so we can display success/error\n\n return response;\n }}\n processRowDelete={async (item) => {\n this.setState({ pleaseWait: true });\n item.templateName = templateNameHardcoded;\n const response = await this.api.api.v1.VSpacesDigitwin.RemoveInstance(item);\n if (response.isSuccessful) await this.RemoveInstanceLocal(item);\n // await this.getData();\n this.addResponseMessage(response);\n this.setState({ pleaseWait: false })\n return response;\n }}\n processSaveAll={async (rows) => {\n this.setState({ pleaseWait: true, lastResponses: [] });\n\n let chunks = [];\n\n while (rows.length) {\n let chunk = rows.splice(0, 10);\n chunks.push(chunk);\n }\n for (const c of chunks) {\n let response = await this.api.api.v1.VSpacesDigitwin.AddOrUpdateManyInstances(c);\n this.addResponseMessage(response);\n }\n // let tasks = chunks.map(c => {\n // return new Promise>(async resolve => {\n // let response = await this.api.api.v1.VSpacesDigitwin.AddOrUpdateManyInstances(c);\n // this.addResponseMessage(response);\n // resolve(response);\n // });\n // })\n // let response = await Promise.all(tasks);\n\n this.setState({ pleaseWait: false }); // so we can display success/error\n // if (!response) throw Error('missing response');\n return new Promise(r => setTimeout(r, 10));\n // return response[0];\n }}\n rows={rows}\n columns={columns}\n />\n \n \n \n \n \n }\n \n \n \n }\n\n /** add or update local memory version while we wait for server sync */\n AddOrUpdateInstanceLocal = (item: IVSpaceProperty) => {\n\n if (!this.state.digitwinInstances) throw new Error('missing digitwinInstances');\n if (!this.state.digitwinInstances.data) throw new Error('missing digitwinInstances.data');\n\n // find entry \n let filter = this.state.digitwinInstances.data.filter(d => d.id === item.id)\n if (filter.length !== 1) {\n // new entry?\n console.log('adding item to list', item)\n this.state.digitwinInstances.data.push(item);\n }\n\n if (filter.length === 1) {\n // found\n console.log('updating item in list', item)\n const index = _.findIndex(this.state.digitwinInstances.data, { id: item.id });\n this.state.digitwinInstances.data.splice(index, 1, item);\n }\n\n let digitwinInstances = this.state.digitwinInstances;\n this.setState({ digitwinInstances });\n }\n\n /** remove local memory version while we wait for server sync */\n RemoveInstanceLocal = (item: IVSpaceProperty) => {\n if (!this.state.digitwinInstances) throw new Error('missing digitwinInstances');\n if (!this.state.digitwinInstances.data) throw new Error('missing digitwinInstances.data');\n\n let digitwinInstances = this.state.digitwinInstances;\n digitwinInstances.data = this.state.digitwinInstances.data.filter(d => d.id !== item.id);\n\n this.setState({ digitwinInstances });\n }\n}\n\nexport default function VSpaceMain(props: VSpaceMainProps) {\n let navigate = useNavigate();\n return \n}","import { Brightness5TwoTone, Brightness7TwoTone, SettingsBrightnessTwoTone } from '@mui/icons-material';\nimport { ToggleButtonGroup, ToggleButton, Typography } from '@mui/material';\nimport * as React from 'react';\n\n\ninterface DarkModeToggleProps {\n onChange: (displayMode: TDisplayMode, darkMode: boolean) => void\n}\n\ninterface DarkModeToggleState {\n displayMode: TDisplayMode\n}\n\nexport type TDisplayMode = \"dark\" | \"system\" | \"light\";\n\nexport class DarkModeToggle extends React.Component {\n\n state: DarkModeToggleState = {\n displayMode: 'system'\n }\n\n\n\n render() {\n return (\n <>\n DARK MODE TOGGLE\n {\n if (displayMode) {\n this.setState({ displayMode });\n if (this.props.onChange) {\n let darkMode = false;\n if (displayMode === 'dark') darkMode = true;\n if (displayMode === 'light') darkMode = false;\n if (displayMode === 'system') darkMode = checkSystemDarkMode();\n this.props.onChange(displayMode, darkMode);\n }\n }\n }}\n aria-label=\"text alignment\"\n >\n \n Light\n \n\n \n System\n \n\n \n Dark\n \n \n );\n }\n}\n\n\nexport const checkSystemDarkMode = () => {\n return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n}","import { Box, IconButton, Skeleton, ThemeOptions, Typography } from '@mui/material';\nimport * as React from 'react';\nimport { APIVodafoneVSpacesAPI } from '../../vspace/api';\nimport { ITheme, IThemeResponse } from '../../vspace/interfaces';\nimport { IToken } from '../utils';\n\nimport {\n DataGridPro,\n LicenseInfo\n} from '@mui/x-data-grid-pro';\nimport { CheckTwoTone } from '@mui/icons-material';\n\nLicenseInfo.setLicenseKey('11dfa392be05d10d58887edf4f20e775T1JERVI6NDE2MjgsRVhQSVJZPTE2ODEzMzgwODU1NTIsS0VZVkVSU0lPTj0x');\n\ninterface ThemeSelectorProps {\n token: IToken;\n onThemeChange: (theme: ThemeOptions) => void\n}\n\ninterface ThemeSelectorState {\n themeData?: IThemeResponse\n activeTheme?: ITheme\n}\n\nexport type TDisplayMode = \"dark\" | \"system\" | \"light\";\n\n\n\nexport class ThemeSelector extends React.Component {\n\n\n state: ThemeSelectorState = {\n\n }\n\n api = new APIVodafoneVSpacesAPI();\n\n componentDidMount = () => {\n this.api.authorization = `${this.props.token.token_type} ${this.props.token.access_token}`;\n this.getTheme();\n }\n\n getTheme = async () => {\n let response = await this.api.api.v1.VSpacesFrontend.GetThemeProperties();\n if (!response.data) return;\n let activeTheme = response.data.themes[response.data.activeThemeName];\n console.log({ activeTheme });\n this.setState({ activeTheme, themeData: response.data })\n }\n\n setTheme = async (activeThemeName: string) => {\n let themeData = this.state.themeData;\n if (!themeData) return;\n themeData.activeThemeName = activeThemeName;\n this.setState({ themeData });\n\n let selectedTheme = themeData.themes[activeThemeName];\n\n let theme: ThemeOptions = {\n palette: {\n mode: checkIfColourIsLight(selectedTheme.mainContentBackgroundColour) ? 'light' : 'dark',\n primary: {\n main: selectedTheme.widgetContentAccentColour,\n },\n secondary: {\n main: selectedTheme.rightMenuTabHeaderTextHoverColour,\n contrastText: selectedTheme.mainContentTextColour,\n },\n background: {\n default: selectedTheme.mainContentBackgroundColour,\n paper: selectedTheme.landingPageMainContentBackgroundColour,\n },\n text: {\n primary: selectedTheme.mainContentTextColour,\n },\n },\n }\n\n this.props.onThemeChange(theme);\n }\n\n render() {\n\n if (!this.state.themeData) return \n\n return (<>\n THEMES\n\n props.value\n ? { this.setTheme(props.row.name); }}>\n \n \n : { this.setTheme(props.row.name); }}>\n \n ,\n width: 5\n },\n {\n field: 'name',\n headerName: 'Name',\n width: 120\n }, {\n field: 'data',\n headerName: 'Colours',\n flex: 2,\n width: 400,\n renderCell: (props) => \n }]}\n rows={Object.entries(this.state.themeData.themes).map(v => {\n let active = v[0] === this.state.themeData?.activeThemeName;\n return { active, name: v[0], id: v[0], data: v[1] }\n })}\n />\n );\n }\n}\n\nexport const ThemePreview = (props: { theme: ITheme }) => {\n // let list = [\"mainContentBackgroundColour\", \"mainContentTextColour\", \"inputBackgroundColour\" ];\n let list = Object.keys(props.theme);\n return \n {list.map((p, i) => )}\n \n}\n\n\nexport const checkIfColourIsLight = (rgbastring: string): boolean => {\n try {\n let a = rgbastring.slice(5, -1).split(',').map(i => parseFloat(i))\n if (a[0] > 125) return true;\n if (a[1] > 125) return true;\n if (a[2] > 125) return true;\n return false;\n } catch (err) { return false; }\n}","// from https://mui.com/material-ui/react-avatar/\n\nexport function stringToColor(inputstring: string) {\n\n const commanderColours: any = {\n \"--vc-1-light\": \"#e46835\",\n \"--vc-1-light-contrast\": \"#252525\",\n \"--vc-1-medium\": \"#cb4e1b\",\n \"--vc-1-medium-contrast\": \"#ffffff\",\n \"--vc-1-dark\": \"#9e3d15\",\n \"--vc-1-dark-contrast\": \"#ffffff\",\n \"--vc-2-light\": \"#f7e08e\",\n \"--vc-2-light-contrast\": \"#252525\",\n \"--vc-2-medium\": \"#f4d35e\",\n \"--vc-2-medium-contrast\": \"#252525\",\n \"--vc-2-dark\": \"#f1c62e\",\n \"--vc-2-dark-contrast\": \"#252525\",\n \"--vc-3-light\": \"#00dcd7\",\n \"--vc-3-light-contrast\": \"#252525\",\n \"--vc-3-medium\": \"#00a9a5\",\n \"--vc-3-medium-contrast\": \"#252525\",\n \"--vc-3-dark\": \"#007673\",\n \"--vc-3-dark-contrast\": \"#ffffff\",\n \"--vc-4-light\": \"#1d7fb4\",\n \"--vc-4-light-contrast\": \"#000000\",\n \"--vc-4-medium\": \"#166088\",\n \"--vc-4-medium-contrast\": \"#ffffff\",\n \"--vc-4-dark\": \"#0f415c\",\n \"--vc-4-dark-contrast\": \"#ffffff\",\n \"--vc-5-light\": \"#133393\",\n \"--vc-5-light-contrast\": \"#ffffff\",\n \"--vc-5-medium\": \"#0d2366\",\n \"--vc-5-medium-contrast\": \"#ffffff\",\n \"--vc-5-dark\": \"#071339\",\n \"--vc-5-dark-contrast\": \"#ffffff\",\n \"--vc-6-light\": \"#763aab\",\n \"--vc-6-light-contrast\": \"#ffffff\",\n \"--vc-6-medium\": \"#5c2d85\",\n \"--vc-6-medium-contrast\": \"#ffffff\",\n \"--vc-6-dark\": \"#42205f\",\n \"--vc-6-dark-contrast\": \"#ffffff\",\n \"--vc-7-light\": \"#e632e9\",\n \"--vc-7-light-contrast\": \"#000000\",\n \"--vc-7-medium\": \"#ce16d2\",\n \"--vc-7-medium-contrast\": \"#000000\",\n \"--vc-7-dark\": \"#a111a4\",\n \"--vc-7-dark-contrast\": \"#ffffff\",\n \"--vc-8-light\": \"#cc219f\",\n \"--vc-8-light-contrast\": \"#ffffff\",\n \"--vc-8-medium\": \"#a01a7d\",\n \"--vc-8-medium-contrast\": \"#ffffff\",\n \"--vc-8-dark\": \"#74135b\",\n \"--vc-8-dark-contrast\": \"#ffffff\",\n }\n\n const _shades: string[] = [\n 'light',\n 'medium',\n 'dark'\n ];\n\n // let hash = 0;\n // let i;\n\n // /* eslint-disable no-bitwise */\n // for (i = 0; i < inputstring.length; i += 1) {\n // hash = inputstring.charCodeAt(i) + ((hash << 5) - hash);\n // }\n\n // let color = '#';\n\n // for (i = 0; i < 3; i += 1) {\n // const value = (hash >> (i * 8)) & 0xff;\n // color += `00${value.toString(16)}`.slice(-2);\n // }\n // /* eslint-enable no-bitwise */\n\n // return color;\n\n const hash: number = stringToHash(inputstring);\n\n const colourVar: string = `--vc-${Math.round(inputstring.length % 8)}-${_shades[Math.round(Math.abs(hash) % 3)]}`;\n\n return {\n background: commanderColours[colourVar],\n borderColor: commanderColours[colourVar],\n colour: commanderColours[`${colourVar}-contrast`]\n }\n\n}\n\nexport function stringAvatar(name?: string) {\n\n\n\n\n if (!name) return {};\n\n if (name?.trim() === '') return {};\n\n if (name.split(' ').length < 2) return {\n sx: {\n color: (name) ? stringToColor(name).colour : undefined,\n bgcolor: (name) ? stringToColor(name).background : undefined,\n width: 35.22, height: 35.22,\n fontSize: '14px',\n fontWeight: 500\n },\n children: `${name[0]}`\n }\n\n return {\n sx: {\n color: (name) ? stringToColor(name).colour : undefined,\n bgcolor: (name) ? stringToColor(name).background : undefined,\n width: 35.22, height: 35.22,\n fontSize: '14px',\n fontWeight: 500\n },\n children: `${name.split(' ')[0][0]}${name.split(' ')[1][0]}`.toUpperCase(),\n };\n}\n\n\nexport function stringToHash(value: string): number {\n let hash: number = 0;\n\n for (let i: number = 0; i < value.length; i++) {\n // eslint-disable-next-line no-bitwise\n hash = value.charCodeAt(i) + ((hash << 5) - hash);\n }\n\n return hash;\n}\n","import { AccountCircleRounded, HomeRounded, PersonRounded, ScatterPlotRounded } from '@mui/icons-material';\nimport {\n Toolbar,\n IconButton,\n Box,\n CssBaseline,\n createTheme,\n ThemeProvider,\n ThemeOptions,\n Divider,\n Button,\n Avatar,\n Typography,\n Tooltip,\n Menu,\n MenuItem,\n ListItemIcon,\n Chip\n} from '@mui/material';\n\nimport React from 'react';\n\nimport { Outlet, Link as RouterLink } from 'react-router-dom';\nimport { INodeSettings, IToken } from '../../interfaces';\nimport { checkSystemDarkMode, DarkModeToggle, TDisplayMode } from './darkModeToggle';\nimport { ThemeSelector } from './themeSelector';\nimport { stringAvatar } from '../utils/avatarname'\nimport { IAppState } from '../../App';\ninterface IRouterWrapperState {\n menuOpen: boolean\n displayMode: TDisplayMode\n darkMode?: boolean\n theme?: ThemeOptions\n menuAnchor?: any\n}\n\ninterface IRouterWrapperProps {\n token: IToken;\n appState: IAppState;\n nodesettings: INodeSettings\n}\n\nexport default class RouterWrapper extends React.Component {\n state: IRouterWrapperState = {\n menuOpen: false,\n displayMode: 'system',\n darkMode: checkSystemDarkMode()\n }\n\n componentDidMount = () => {\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => {\n console.log(e.matches);\n // const newColorScheme = e.matches ? \"dark\" : \"light\";\n if (this.state.displayMode === 'system') this.setState({ darkMode: e.matches });\n });\n }\n\n render() {\n\n\n const lightTheme = createTheme({\n palette: {\n background: {\n default: '#e8e8e8'\n }\n },\n });\n\n const darkTheme = createTheme({\n palette: {\n mode: 'dark',\n primary: {\n main: \"#008dcb\",\n },\n secondary: {\n main: \"#f78419\",\n contrastText: \"rgba(255,255,255,0.87)\",\n },\n background: {\n default: \"#272b34\",\n paper: \"#272b34\",\n },\n text: {\n primary: \"#eeeeee\",\n },\n },\n });\n\n let theme = this.state.darkMode ? darkTheme : lightTheme;\n if (this.state.theme) theme = createTheme(this.state.theme);\n\n\n return (\n \n \n \n \n \n \n\n {this.props.appState?.simplifiedAccessRules?.isAdmin ? ADMIN : undefined}\n \n\n \n {this.props.appState?.entityAccessGroups?.map(e => i.entityAccessGroup.id === e.id).map(x => x.entity.name).join(', ') || ''} >\n {\n window.open(`${this.props.nodesettings.NodeSettings.DashboardUrl}/_apps/account-manager/details/entity-access-groups/edit/${e.id}`, '_blank')\n }}\n size=\"small\"\n label={e.name} sx={{ mr: 1, mt: 1, cursor: 'pointer' }} />\n )}\n \n\n \n { this.setState({ menuOpen: true, menuAnchor: e.currentTarget }) }}>\n \n \n \n \n\n { this.setState({ menuOpen: false }); }}\n onClick={() => { this.setState({ menuOpen: false }); }}\n PaperProps={{\n elevation: 0,\n sx: {\n overflow: 'visible',\n filter: 'drop-shadow(0px 2px 8px rgba(0,0,0,0.32))',\n mt: 1.5,\n '& .MuiAvatar-root': {\n width: 32,\n height: 32,\n ml: -0.5,\n mr: 1,\n },\n '&:before': {\n content: '\"\"',\n display: 'block',\n position: 'absolute',\n top: 0,\n right: 14,\n width: 10,\n height: 10,\n bgcolor: 'background.paper',\n transform: 'translateY(-50%) rotate(45deg)',\n zIndex: 0,\n },\n },\n }}\n transformOrigin={{ horizontal: 'right', vertical: 'top' }}\n anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}\n >\n\n \n \n \n \n Home\n \n\n \n \n \n \n Account\n \n\n \n \n \n \n Members\n \n\n \n \n \n \n Entity Access Groups\n \n\n \n\n \n { this.setState({ displayMode, darkMode, theme: undefined }); }} />\n { this.setState({ theme }) }} />\n \n\n \n\n \n \n \n \n );\n }\n}","import {\n APIIoTnxtMain,\n IDapiEntityAccessGroup,\n IEntity,\n IEntityPathAccess\n} from \"../commanderapi\";\nimport { INodeSettings } from \"../interfaces\";\n\nexport interface ISimplifiedAccessRules {\n isAdmin: boolean\n viewAll: boolean\n editList: { entity: IEntity, pathAccess: IEntityPathAccess, entityAccessGroup: IDapiEntityAccessGroup }[]\n}\n\nexport const getInitialData = async (options: {\n authorization: string,\n baseUrl: string,\n baseUrlRobot: string\n nodeapisettings: INodeSettings\n}) => {\n const iotnxtAPI = new APIIoTnxtMain({\n authorization: options.authorization,\n baseUrl: options.baseUrl,\n nodeapisettings: options.nodeapisettings\n });\n\n const iotnxtAPIRobot = new APIIoTnxtMain({\n authorization: options.authorization,\n baseUrl: options.baseUrlRobot,\n nodeapisettings: options.nodeapisettings\n });\n\n const [profile, groups, entityList] = await Promise.all([\n iotnxtAPI.authorization.profile.get(),\n iotnxtAPIRobot.policyServer.groups(),\n iotnxtAPIRobot.dapi.EntityTree.GetAccountChildren().then(r => r.result)\n ]);\n\n // this.setState({ profile, groups, entityList });\n\n /** Which groups this user may access */\n let entityAccessGroups = await iotnxtAPIRobot.dapi.EntityAccess.GetEntityAccessGroups({ username: profile.username }).then(r => r.result);\n\n if (entityAccessGroups === null) entityAccessGroups = [];\n\n let entityAccessGroupData = await Promise.all(entityAccessGroups.map(entityAccessGroup => iotnxtAPIRobot.dapi.EntityAccess.GetPathAccess({\n path: `/${options.nodeapisettings.DigitwinClientOptions.DefaultParentId}`,\n recursive: true,\n sidType: \"groupId\",\n sid: entityAccessGroup.id\n }).then(r =>\n ({ entityPathAccess: r.result, entityAccessGroup })\n )));\n\n /// SIMPLIFIED ACCESS RULES START\n let simplifiedAccessRules: ISimplifiedAccessRules = {\n isAdmin: entityAccessGroups.filter(group => group.name === \"VS Admin\").length > 0,\n viewAll: true,\n editList: []\n };\n\n entityAccessGroupData.forEach(eagd => eagd.entityPathAccess.filter(pathAccess => pathAccess.grant === 'allowed')\n .forEach(\n pathAccess => {\n entityList.filter(e => pathAccess.path.endsWith(e.entityId)).forEach(entity => {\n // TODO check for duplicates first?\n simplifiedAccessRules.editList.push({\n entityAccessGroup: eagd.entityAccessGroup,\n pathAccess,\n entity\n })\n })\n }));\n\n let userPermissionEntities = simplifiedAccessRules.editList.map(x => x.entity.name);\n /// SIMPLIFIED ACCESS RULES DONE\n // this.setState({ entityAccessGroups, entityAccessGroupData, simplifiedAccessRules, userPermissionEntities });\n return { profile, groups, entityList, entityAccessGroups, entityAccessGroupData, simplifiedAccessRules, userPermissionEntities };\n}","import React from 'react';\n\nimport {\n BrowserRouter,\n Route,\n Routes\n} from 'react-router-dom';\n\nimport {\n Box,\n CircularProgress,\n} from '@mui/material'\n\nimport {\n IAppSettings,\n Main,\n} from './components';\n\nimport { IGridConfigType, INodeSettings, IToken } from './interfaces';\nimport VSpaceMain from './vspace/vspace_main';\nimport { APIVodafoneVSpacesAPI } from './vspace/api';\nimport RouterWrapper from './components/wrapper/wrapper';\nimport {\n IProfile,\n IGroup,\n IDapiEntityAccessGroup,\n IEntityPathAccess,\n IEntity\n} from './commanderapi';\n\nimport { getInitialData, ISimplifiedAccessRules } from './vspace/getInitialData';\n\nexport interface IAppState {\n title: string;\n appsettings?: IAppSettings;\n token?: IToken,\n profile?: IProfile\n groups?: IGroup[]\n entityAccessGroups?: IDapiEntityAccessGroup[]\n entityAccessGroupData?: {\n entityPathAccess: IEntityPathAccess[];\n entityAccessGroup: IDapiEntityAccessGroup;\n }[]\n entityList?: IEntity[]\n simplifiedAccessRules?: ISimplifiedAccessRules\n /** the names of the entities the user can access. Admin ignores this. */\n userPermissionEntities?: string[]\n}\n\n\n\nexport const config = {\n /** uses commander api proxy with own auth token */\n baseUrl: '/nodeapi',\n /** uses commander api proxy with robot token */\n baseUrlRobot: '/nodeapirobot'\n}\n\nexport default class App extends React.Component<{}, IAppState> {\n state: IAppState = {\n title: 'VSpaces'\n }\n\n api = new APIVodafoneVSpacesAPI();\n\n componentDidMount = async () => {\n document.title = this.state.title;\n let appsettings: IAppSettings = await fetch(`/nodeapisettings`)\n .then(r => r.json())\n .then((nodeapisettings: INodeSettings) => {\n return {\n authenticationServer: nodeapisettings.ServiceOptions.AuthenticationServer,\n webApiUrl: window.location.origin,\n clientUrl: window.location.origin,\n clientId: nodeapisettings.ServiceOptions.ClientId,\n nodeapisettings\n } as IAppSettings\n });\n\n this.setState({ appsettings });\n };\n\n\n\n render() {\n if (!this.state.appsettings) return \n\n return (\n \n \n {\n\n if (!this.state.appsettings) throw Error('nodeapisettings missing.')\n\n this.api.authorization = `${auth.token.token_type} ${auth.token.access_token}`;\n let data = await getInitialData(\n {\n authorization: `${auth.token.token_type} ${auth.token.access_token}`,\n baseUrl: config.baseUrl,\n baseUrlRobot: config.baseUrlRobot,\n nodeapisettings: this.state.appsettings?.nodeapisettings\n })\n this.setState(data);\n this.setState({ token: auth.token })\n console.log('AUTHED! ', auth);\n }}\n />}\n >\n\n {this.state.token\n // LOGGED IN\n ? <>\n }>\n } />\n } />\n \n \n // NOT LOGGED IN\n : <>\n } />\n } />\n }\n\n \n \n \n );\n }\n}","import ReactDOM from 'react-dom/client';\nimport App from './App';\n\nconst root = ReactDOM.createRoot(\n document.getElementById('root') as HTMLElement\n);\n\nroot.render();\n","import _ from \"lodash\";\nimport { ViewMapState } from \"../components/maps\";\n\nexport const Regions: IRegion[] = [\n {\n name: \"Africa\",\n code: \"AF\",\n viewState: {\n \"width\": 1058,\n \"height\": 678,\n \"latitude\": 1.3930234973179005,\n \"longitude\": 19.773710007941038,\n \"zoom\": 2.5690983522765927,\n \"bearing\": 0,\n \"pitch\": 0,\n \"altitude\": 1.5,\n \"maxZoom\": 20,\n \"minZoom\": 0,\n \"maxPitch\": 60,\n \"minPitch\": 0,\n \"position\": [\n 0,\n 0,\n 0\n ]\n }\n },\n {\n name: \"North America\",\n code: \"NA\",\n viewState: {\n \"width\": 1058,\n \"height\": 678,\n \"latitude\": 37.06932401238583,\n \"longitude\": -94.68383665264315,\n \"zoom\": 3.3252516818875097,\n \"bearing\": 0,\n \"pitch\": 0,\n \"altitude\": 1.5,\n \"maxZoom\": 20,\n \"minZoom\": 0,\n \"maxPitch\": 60,\n \"minPitch\": 0,\n \"position\": [\n 0,\n 0,\n 0\n ]\n }\n },\n {\n name: \"Oceania\",\n code: \"OC\",\n viewState: {\n \"width\": 1058,\n \"height\": 678,\n \"latitude\": -16.972589130226204,\n \"longitude\": 133.0997625317953,\n \"zoom\": 2.6071332441576116,\n \"bearing\": 0,\n \"pitch\": 0,\n \"altitude\": 1.5,\n \"maxZoom\": 20,\n \"minZoom\": 0,\n \"maxPitch\": 60,\n \"minPitch\": 0,\n \"position\": [\n 0,\n 0,\n 0\n ]\n }\n },\n // {\n // name: \"Antarctica\",\n // code: \"AN\",\n // viewState: {}\n // },\n {\n name: \"Asia\",\n code: \"AS\",\n viewState: {\n \"width\": 1058,\n \"height\": 678,\n \"latitude\": 39.796873957087115,\n \"longitude\": 93.0164181819775,\n \"zoom\": 2.587711030909388,\n \"bearing\": 0,\n \"pitch\": 0,\n \"altitude\": 1.5,\n \"maxZoom\": 20,\n \"minZoom\": 0,\n \"maxPitch\": 60,\n \"minPitch\": 0,\n \"position\": [\n 0,\n 0,\n 0\n ]\n }\n },\n {\n name: \"Europe\",\n code: \"EU\",\n viewState: {\n \"width\": 1058,\n \"height\": 678,\n \"latitude\": 54.90519073264755,\n \"longitude\": 11.072373252058009,\n \"zoom\": 2.7492758793569694,\n \"bearing\": 0,\n \"pitch\": 0,\n \"altitude\": 1.5,\n \"maxZoom\": 20,\n \"minZoom\": 0,\n \"maxPitch\": 60,\n \"minPitch\": 0,\n \"position\": [\n 0,\n 0,\n 0\n ]\n }\n },\n {\n name: \"South America\",\n code: \"SA\",\n viewState: {\n \"width\": 1058,\n \"height\": 678,\n \"latitude\": -26.99973966845697,\n \"longitude\": -64.5372811200609,\n \"zoom\": 2.354428233693936,\n \"bearing\": 0,\n \"pitch\": 0,\n \"altitude\": 1.5,\n \"maxZoom\": 20,\n \"minZoom\": 0,\n \"maxPitch\": 60,\n \"minPitch\": 0,\n \"position\": [\n 0,\n 0,\n 0\n ]\n }\n },\n];\n\nexport interface IRegion {\n name: string\n code: string\n viewState: ViewMapState\n}\n\nexport function regionCodeToName(code: string) {\n let z = Regions.filter(r => r.code === code)\n if (!z[0]) return code;\n return z[0].name;\n}\n\nexport function isCountryInRegionCode(country: string, regionCode: string) {\n let find = Countries\n .filter(c => c.name === country)\n .filter(c => c.region === regionCode)\n\n return (find.length > 0)\n}\n\n/** Returns an array of currency codes AFN, ZAR, USD etc.. */\nexport function listOfCurrencies() {\n return _.uniq(Countries.map(c => c.currency.code)).sort((a, b) => a > b ? 1 : -1);\n}\n\nexport const Countries = [\n {\n \"name\": \"Afghanistan\",\n \"code\": \"AF\",\n \"capital\": \"Kabul\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"AFN\",\n \"name\": \"Afghan afghani\",\n \"symbol\": \"؋\"\n },\n \"language\": {\n \"code\": \"ps\",\n \"name\": \"Pashto\",\n },\n \"flag\": \"https://restcountries.eu/data/afg.svg\",\n },\n {\n \"name\": \"Åland Islands\",\n \"code\": \"AX\",\n \"capital\": \"Mariehamn\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"sv\",\n \"name\": \"Swedish\",\n },\n \"flag\": \"https://restcountries.eu/data/ala.svg\",\n },\n {\n \"name\": \"Albania\",\n \"code\": \"AL\",\n \"capital\": \"Tirana\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"ALL\",\n \"name\": \"Albanian lek\",\n \"symbol\": \"L\"\n },\n \"language\": {\n \"code\": \"sq\",\n \"name\": \"Albanian\",\n },\n \"flag\": \"https://restcountries.eu/data/alb.svg\",\n },\n {\n \"name\": \"Algeria\",\n \"code\": \"DZ\",\n \"capital\": \"Algiers\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"DZD\",\n \"name\": \"Algerian dinar\",\n \"symbol\": \"د.ج\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/dza.svg\",\n },\n {\n \"name\": \"American Samoa\",\n \"code\": \"AS\",\n \"capital\": \"Pago Pago\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United State Dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/asm.svg\",\n },\n {\n \"name\": \"Andorra\",\n \"code\": \"AD\",\n \"capital\": \"Andorra la Vella\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"ca\",\n \"name\": \"Catalan\",\n },\n \"flag\": \"https://restcountries.eu/data/and.svg\",\n },\n {\n \"name\": \"Angola\",\n \"code\": \"AO\",\n \"capital\": \"Luanda\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"AOA\",\n \"name\": \"Angolan kwanza\",\n \"symbol\": \"Kz\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"name\": \"Portuguese\",\n },\n \"flag\": \"https://restcountries.eu/data/ago.svg\",\n },\n {\n \"name\": \"Anguilla\",\n \"code\": \"AI\",\n \"capital\": \"The Valley\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/aia.svg\",\n },\n {\n \"name\": \"Antigua and Barbuda\",\n \"code\": \"AG\",\n \"capital\": \"Saint John's\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/atg.svg\",\n },\n {\n \"name\": \"Argentina\",\n \"code\": \"AR\",\n \"capital\": \"Buenos Aires\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"ARS\",\n \"name\": \"Argentine peso\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/arg.svg\",\n },\n {\n \"name\": \"Armenia\",\n \"code\": \"AM\",\n \"capital\": \"Yerevan\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"AMD\",\n \"name\": \"Armenian dram\",\n \"symbol\": null\n },\n \"language\": {\n \"code\": \"hy\",\n \"name\": \"Armenian\",\n },\n \"flag\": \"https://restcountries.eu/data/arm.svg\",\n },\n {\n \"name\": \"Aruba\",\n \"code\": \"AW\",\n \"capital\": \"Oranjestad\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"AWG\",\n \"name\": \"Aruban florin\",\n \"symbol\": \"ƒ\"\n },\n \"language\": {\n \"code\": \"nl\",\n \"name\": \"Dutch\",\n },\n \"flag\": \"https://restcountries.eu/data/abw.svg\",\n },\n {\n \"name\": \"Australia\",\n \"code\": \"AU\",\n \"capital\": \"Canberra\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"AUD\",\n \"name\": \"Australian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/aus.svg\",\n },\n {\n \"name\": \"Austria\",\n \"code\": \"AT\",\n \"capital\": \"Vienna\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"de\",\n \"name\": \"German\",\n },\n \"flag\": \"https://restcountries.eu/data/aut.svg\",\n },\n {\n \"name\": \"Azerbaijan\",\n \"code\": \"AZ\",\n \"capital\": \"Baku\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"AZN\",\n \"name\": \"Azerbaijani manat\",\n \"symbol\": null\n },\n \"language\": {\n \"code\": \"az\",\n \"name\": \"Azerbaijani\",\n },\n \"flag\": \"https://restcountries.eu/data/aze.svg\",\n },\n {\n \"name\": \"Bahamas\",\n \"code\": \"BS\",\n \"capital\": \"Nassau\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"BSD\",\n \"name\": \"Bahamian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/bhs.svg\",\n },\n {\n \"name\": \"Bahrain\",\n \"code\": \"BH\",\n \"capital\": \"Manama\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"BHD\",\n \"name\": \"Bahraini dinar\",\n \"symbol\": \".د.ب\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/bhr.svg\",\n },\n {\n \"name\": \"Bangladesh\",\n \"code\": \"BD\",\n \"capital\": \"Dhaka\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"BDT\",\n \"name\": \"Bangladeshi taka\",\n \"symbol\": \"৳\"\n },\n \"language\": {\n \"code\": \"bn\",\n \"name\": \"Bengali\",\n },\n \"flag\": \"https://restcountries.eu/data/bgd.svg\",\n },\n {\n \"name\": \"Barbados\",\n \"code\": \"BB\",\n \"capital\": \"Bridgetown\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"BBD\",\n \"name\": \"Barbadian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/brb.svg\",\n },\n {\n \"name\": \"Belarus\",\n \"code\": \"BY\",\n \"capital\": \"Minsk\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"BYN\",\n \"name\": \"New Belarusian ruble\",\n \"symbol\": \"Br\"\n },\n \"language\": {\n \"code\": \"be\",\n \"name\": \"Belarusian\",\n },\n \"flag\": \"https://restcountries.eu/data/blr.svg\",\n },\n {\n \"name\": \"Belgium\",\n \"code\": \"BE\",\n \"capital\": \"Brussels\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"nl\",\n \"name\": \"Dutch\",\n },\n \"flag\": \"https://restcountries.eu/data/bel.svg\",\n },\n {\n \"name\": \"Belize\",\n \"code\": \"BZ\",\n \"capital\": \"Belmopan\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"BZD\",\n \"name\": \"Belize dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/blz.svg\",\n },\n {\n \"name\": \"Benin\",\n \"code\": \"BJ\",\n \"capital\": \"Porto-Novo\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/ben.svg\",\n },\n {\n \"name\": \"Bermuda\",\n \"code\": \"BM\",\n \"capital\": \"Hamilton\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"BMD\",\n \"name\": \"Bermudian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/bmu.svg\",\n },\n {\n \"name\": \"Bhutan\",\n \"code\": \"BT\",\n \"capital\": \"Thimphu\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"BTN\",\n \"name\": \"Bhutanese ngultrum\",\n \"symbol\": \"Nu.\"\n },\n \"language\": {\n \"code\": \"dz\",\n \"name\": \"Dzongkha\",\n },\n \"flag\": \"https://restcountries.eu/data/btn.svg\",\n },\n {\n \"name\": \"Bolivia (Plurinational State of)\",\n \"code\": \"BO\",\n \"capital\": \"Sucre\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"BOB\",\n \"name\": \"Bolivian boliviano\",\n \"symbol\": \"Bs.\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/bol.svg\",\n },\n {\n \"name\": \"Bonaire, Sint Eustatius and Saba\",\n \"code\": \"BQ\",\n \"capital\": \"Kralendijk\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"nl\",\n \"name\": \"Dutch\",\n },\n \"flag\": \"https://restcountries.eu/data/bes.svg\",\n },\n {\n \"name\": \"Bosnia and Herzegovina\",\n \"code\": \"BA\",\n \"capital\": \"Sarajevo\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"BAM\",\n \"name\": \"Bosnia and Herzegovina convertible mark\",\n \"symbol\": null\n },\n \"language\": {\n \"code\": \"bs\",\n \"name\": \"Bosnian\",\n },\n \"flag\": \"https://restcountries.eu/data/bih.svg\",\n },\n {\n \"name\": \"Botswana\",\n \"code\": \"BW\",\n \"capital\": \"Gaborone\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"BWP\",\n \"name\": \"Botswana pula\",\n \"symbol\": \"P\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/bwa.svg\",\n },\n {\n \"name\": \"Bouvet Island\",\n \"code\": \"BV\",\n \"capital\": \"\",\n \"region\": \"AN\",\n \"currency\": {\n \"code\": \"NOK\",\n \"name\": \"Norwegian krone\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"no\",\n \"name\": \"Norwegian\",\n },\n \"flag\": \"https://restcountries.eu/data/bvt.svg\",\n },\n {\n \"name\": \"Brazil\",\n \"code\": \"BR\",\n \"capital\": \"Brasília\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"BRL\",\n \"name\": \"Brazilian real\",\n \"symbol\": \"R$\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"name\": \"Portuguese\",\n },\n \"flag\": \"https://restcountries.eu/data/bra.svg\",\n },\n {\n \"name\": \"British Indian Ocean Territory\",\n \"code\": \"IO\",\n \"capital\": \"Diego Garcia\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/iot.svg\",\n },\n {\n \"name\": \"United States Minor Outlying Islands\",\n \"code\": \"UM\",\n \"capital\": \"\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States Dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/umi.svg\",\n },\n {\n \"name\": \"Virgin Islands (British)\",\n \"code\": \"VG\",\n \"capital\": \"Road Town\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/vgb.svg\",\n },\n {\n \"name\": \"Virgin Islands (U.S.)\",\n \"code\": \"VI\",\n \"capital\": \"Charlotte Amalie\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/vir.svg\",\n },\n {\n \"name\": \"Brunei Darussalam\",\n \"code\": \"BN\",\n \"capital\": \"Bandar Seri Begawan\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"BND\",\n \"name\": \"Brunei dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"ms\",\n \"name\": \"Malay\",\n },\n \"flag\": \"https://restcountries.eu/data/brn.svg\",\n },\n {\n \"name\": \"Bulgaria\",\n \"code\": \"BG\",\n \"capital\": \"Sofia\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"BGN\",\n \"name\": \"Bulgarian lev\",\n \"symbol\": \"лв\"\n },\n \"language\": {\n \"code\": \"bg\",\n \"name\": \"Bulgarian\",\n },\n \"flag\": \"https://restcountries.eu/data/bgr.svg\",\n },\n {\n \"name\": \"Burkina Faso\",\n \"code\": \"BF\",\n \"capital\": \"Ouagadougou\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/bfa.svg\",\n },\n {\n \"name\": \"Burundi\",\n \"code\": \"BI\",\n \"capital\": \"Bujumbura\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"BIF\",\n \"name\": \"Burundian franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/bdi.svg\",\n },\n {\n \"name\": \"Cambodia\",\n \"code\": \"KH\",\n \"capital\": \"Phnom Penh\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"KHR\",\n \"name\": \"Cambodian riel\",\n \"symbol\": \"៛\"\n },\n \"language\": {\n \"code\": \"km\",\n \"name\": \"Khmer\",\n },\n \"flag\": \"https://restcountries.eu/data/khm.svg\",\n },\n {\n \"name\": \"Cameroon\",\n \"code\": \"CM\",\n \"capital\": \"Yaoundé\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XAF\",\n \"name\": \"Central African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/cmr.svg\",\n },\n {\n \"name\": \"Canada\",\n \"code\": \"CA\",\n \"capital\": \"Ottawa\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"CAD\",\n \"name\": \"Canadian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/can.svg\",\n },\n {\n \"name\": \"Cabo Verde\",\n \"code\": \"CV\",\n \"capital\": \"Praia\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"CVE\",\n \"name\": \"Cape Verdean escudo\",\n \"symbol\": \"Esc\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"iso639_2\": \"por\",\n \"name\": \"Portuguese\",\n \"nativeName\": \"Português\"\n },\n \"flag\": \"https://restcountries.eu/data/cpv.svg\",\n },\n {\n \"name\": \"Cayman Islands\",\n \"code\": \"KY\",\n \"capital\": \"George Town\",\n \"region\": \"NA\",\n \"demonym\": \"Caymanian\",\n \"currency\": {\n \"code\": \"KYD\",\n \"name\": \"Cayman Islands dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/cym.svg\",\n },\n {\n \"name\": \"Central African Republic\",\n \"code\": \"CF\",\n \"capital\": \"Bangui\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XAF\",\n \"name\": \"Central African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/caf.svg\",\n },\n {\n \"name\": \"Chad\",\n \"code\": \"TD\",\n \"capital\": \"N'Djamena\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XAF\",\n \"name\": \"Central African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/tcd.svg\",\n },\n {\n \"name\": \"Chile\",\n \"code\": \"CL\",\n \"capital\": \"Santiago\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"CLP\",\n \"name\": \"Chilean peso\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"iso639_2\": \"spa\",\n \"name\": \"Spanish\",\n \"nativeName\": \"Español\"\n },\n \"flag\": \"https://restcountries.eu/data/chl.svg\",\n },\n {\n \"name\": \"China\",\n \"code\": \"CN\",\n \"capital\": \"Beijing\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"CNY\",\n \"name\": \"Chinese yuan\",\n \"symbol\": \"¥\"\n },\n \"language\": {\n \"code\": \"zh\",\n \"name\": \"Chinese\",\n },\n \"flag\": \"https://restcountries.eu/data/chn.svg\",\n },\n {\n \"name\": \"Christmas Island\",\n \"code\": \"CX\",\n \"capital\": \"Flying Fish Cove\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"AUD\",\n \"name\": \"Australian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/cxr.svg\",\n },\n {\n \"name\": \"Cocos (Keeling) Islands\",\n \"code\": \"CC\",\n \"capital\": \"West Island\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"AUD\",\n \"name\": \"Australian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/cck.svg\",\n },\n {\n \"name\": \"Colombia\",\n \"code\": \"CO\",\n \"capital\": \"Bogotá\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"COP\",\n \"name\": \"Colombian peso\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/col.svg\",\n },\n {\n \"name\": \"Comoros\",\n \"code\": \"KM\",\n \"capital\": \"Moroni\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"KMF\",\n \"name\": \"Comorian franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/com.svg\",\n },\n {\n \"name\": \"Congo\",\n \"code\": \"CG\",\n \"capital\": \"Brazzaville\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XAF\",\n \"name\": \"Central African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/cog.svg\",\n },\n {\n \"name\": \"Congo (Democratic Republic of the)\",\n \"code\": \"CD\",\n \"capital\": \"Kinshasa\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"CDF\",\n \"name\": \"Congolese franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/cod.svg\",\n },\n {\n \"name\": \"Cook Islands\",\n \"code\": \"CK\",\n \"capital\": \"Avarua\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"NZD\",\n \"name\": \"New Zealand dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/cok.svg\",\n },\n {\n \"name\": \"Costa Rica\",\n \"code\": \"CR\",\n \"capital\": \"San José\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"CRC\",\n \"name\": \"Costa Rican colón\",\n \"symbol\": \"₡\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/cri.svg\",\n },\n {\n \"name\": \"Croatia\",\n \"code\": \"HR\",\n \"capital\": \"Zagreb\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"HRK\",\n \"name\": \"Croatian kuna\",\n \"symbol\": \"kn\"\n },\n \"language\": {\n \"code\": \"hr\",\n \"name\": \"Croatian\",\n },\n \"flag\": \"https://restcountries.eu/data/hrv.svg\",\n },\n {\n \"name\": \"Cuba\",\n \"code\": \"CU\",\n \"capital\": \"Havana\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"CUC\",\n \"name\": \"Cuban convertible peso\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/cub.svg\",\n },\n {\n \"name\": \"Curaçao\",\n \"code\": \"CW\",\n \"capital\": \"Willemstad\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"ANG\",\n \"name\": \"Netherlands Antillean guilder\",\n \"symbol\": \"ƒ\"\n },\n \"language\": {\n \"code\": \"nl\",\n \"name\": \"Dutch\",\n },\n \"flag\": \"https://restcountries.eu/data/cuw.svg\",\n },\n {\n \"name\": \"Cyprus\",\n \"code\": \"CY\",\n \"capital\": \"Nicosia\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"tr\",\n \"name\": \"Turkish\",\n },\n \"flag\": \"https://restcountries.eu/data/cyp.svg\",\n },\n {\n \"name\": \"Czech Republic\",\n \"code\": \"CZ\",\n \"capital\": \"Prague\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"CZK\",\n \"name\": \"Czech koruna\",\n \"symbol\": \"Kč\"\n },\n \"language\": {\n \"code\": \"cs\",\n \"name\": \"Czech\",\n },\n \"flag\": \"https://restcountries.eu/data/cze.svg\",\n },\n {\n \"name\": \"Denmark\",\n \"code\": \"DK\",\n \"capital\": \"Copenhagen\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"DKK\",\n \"name\": \"Danish krone\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"da\",\n \"name\": \"Danish\",\n },\n \"flag\": \"https://restcountries.eu/data/dnk.svg\",\n },\n {\n \"name\": \"Djibouti\",\n \"code\": \"DJ\",\n \"capital\": \"Djibouti\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"DJF\",\n \"name\": \"Djiboutian franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/dji.svg\",\n },\n {\n \"name\": \"Dominica\",\n \"code\": \"DM\",\n \"capital\": \"Roseau\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/dma.svg\",\n },\n {\n \"name\": \"Dominican Republic\",\n \"code\": \"DO\",\n \"capital\": \"Santo Domingo\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"DOP\",\n \"name\": \"Dominican peso\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/dom.svg\",\n },\n {\n \"name\": \"Ecuador\",\n \"code\": \"EC\",\n \"capital\": \"Quito\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/ecu.svg\",\n },\n {\n \"name\": \"Egypt\",\n \"code\": \"EG\",\n \"capital\": \"Cairo\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"EGP\",\n \"name\": \"Egyptian pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/egy.svg\",\n },\n {\n \"name\": \"El Salvador\",\n \"code\": \"SV\",\n \"capital\": \"San Salvador\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/slv.svg\",\n },\n {\n \"name\": \"Equatorial Guinea\",\n \"code\": \"GQ\",\n \"capital\": \"Malabo\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XAF\",\n \"name\": \"Central African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"es\",\n \"iso639_2\": \"spa\",\n \"name\": \"Spanish\",\n \"nativeName\": \"Español\"\n },\n \"flag\": \"https://restcountries.eu/data/gnq.svg\",\n },\n {\n \"name\": \"Eritrea\",\n \"code\": \"ER\",\n \"capital\": \"Asmara\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"ERN\",\n \"name\": \"Eritrean nakfa\",\n \"symbol\": \"Nfk\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/eri.svg\",\n },\n {\n \"name\": \"Estonia\",\n \"code\": \"EE\",\n \"capital\": \"Tallinn\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"et\",\n \"name\": \"Estonian\",\n },\n \"flag\": \"https://restcountries.eu/data/est.svg\",\n },\n {\n \"name\": \"Ethiopia\",\n \"code\": \"ET\",\n \"capital\": \"Addis Ababa\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"ETB\",\n \"name\": \"Ethiopian birr\",\n \"symbol\": \"Br\"\n },\n \"language\": {\n \"code\": \"am\",\n \"name\": \"Amharic\",\n },\n \"flag\": \"https://restcountries.eu/data/eth.svg\",\n },\n {\n \"name\": \"Falkland Islands (Malvinas)\",\n \"code\": \"FK\",\n \"capital\": \"Stanley\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"FKP\",\n \"name\": \"Falkland Islands pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/flk.svg\",\n },\n {\n \"name\": \"Faroe Islands\",\n \"code\": \"FO\",\n \"capital\": \"Tórshavn\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"DKK\",\n \"name\": \"Danish krone\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"fo\",\n \"name\": \"Faroese\",\n },\n \"flag\": \"https://restcountries.eu/data/fro.svg\",\n },\n {\n \"name\": \"Fiji\",\n \"code\": \"FJ\",\n \"capital\": \"Suva\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"FJD\",\n \"name\": \"Fijian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/fji.svg\",\n },\n {\n \"name\": \"Finland\",\n \"code\": \"FI\",\n \"capital\": \"Helsinki\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fi\",\n \"iso639_2\": \"fin\",\n \"name\": \"Finnish\",\n \"nativeName\": \"suomi\"\n },\n \"flag\": \"https://restcountries.eu/data/fin.svg\",\n },\n {\n \"name\": \"France\",\n \"code\": \"FR\",\n \"capital\": \"Paris\",\n \"region\": \"EU\",\n \"demonym\": \"French\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/fra.svg\",\n },\n {\n \"name\": \"French Guiana\",\n \"code\": \"GF\",\n \"capital\": \"Cayenne\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/guf.svg\",\n },\n {\n \"name\": \"French Polynesia\",\n \"code\": \"PF\",\n \"capital\": \"Papeetē\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"XPF\",\n \"name\": \"CFP franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/pyf.svg\",\n },\n {\n \"name\": \"French Southern Territories\",\n \"code\": \"TF\",\n \"capital\": \"Port-aux-Français\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/atf.svg\",\n },\n {\n \"name\": \"Gabon\",\n \"code\": \"GA\",\n \"capital\": \"Libreville\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XAF\",\n \"name\": \"Central African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/gab.svg\",\n },\n {\n \"name\": \"Gambia\",\n \"code\": \"GM\",\n \"capital\": \"Banjul\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"GMD\",\n \"name\": \"Gambian dalasi\",\n \"symbol\": \"D\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/gmb.svg\",\n },\n {\n \"name\": \"Georgia\",\n \"code\": \"GE\",\n \"capital\": \"Tbilisi\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"GEL\",\n \"name\": \"Georgian Lari\",\n \"symbol\": \"ლ\"\n },\n \"language\": {\n \"code\": \"ka\",\n \"name\": \"Georgian\",\n },\n \"flag\": \"https://restcountries.eu/data/geo.svg\",\n },\n {\n \"name\": \"Germany\",\n \"code\": \"DE\",\n \"capital\": \"Berlin\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"de\",\n \"name\": \"German\",\n },\n \"flag\": \"https://restcountries.eu/data/deu.svg\",\n },\n {\n \"name\": \"Ghana\",\n \"code\": \"GH\",\n \"capital\": \"Accra\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"GHS\",\n \"name\": \"Ghanaian cedi\",\n \"symbol\": \"₵\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/gha.svg\",\n },\n {\n \"name\": \"Gibraltar\",\n \"code\": \"GI\",\n \"capital\": \"Gibraltar\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"GIP\",\n \"name\": \"Gibraltar pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/gib.svg\",\n },\n {\n \"name\": \"Greece\",\n \"code\": \"GR\",\n \"capital\": \"Athens\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"el\",\n \"name\": \"Greek (modern)\",\n },\n \"flag\": \"https://restcountries.eu/data/grc.svg\",\n },\n {\n \"name\": \"Greenland\",\n \"code\": \"GL\",\n \"capital\": \"Nuuk\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"DKK\",\n \"name\": \"Danish krone\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"kl\",\n \"name\": \"Kalaallisut\",\n },\n \"flag\": \"https://restcountries.eu/data/grl.svg\",\n },\n {\n \"name\": \"Grenada\",\n \"code\": \"GD\",\n \"capital\": \"St. George's\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/grd.svg\",\n },\n {\n \"name\": \"Guadeloupe\",\n \"code\": \"GP\",\n \"capital\": \"Basse-Terre\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/glp.svg\",\n },\n {\n \"name\": \"Guam\",\n \"code\": \"GU\",\n \"capital\": \"Hagåtña\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/gum.svg\",\n },\n {\n \"name\": \"Guatemala\",\n \"code\": \"GT\",\n \"capital\": \"Guatemala City\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"GTQ\",\n \"name\": \"Guatemalan quetzal\",\n \"symbol\": \"Q\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/gtm.svg\",\n },\n {\n \"name\": \"Guernsey\",\n \"code\": \"GG\",\n \"capital\": \"St. Peter Port\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"GBP\",\n \"name\": \"British pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/ggy.svg\",\n },\n {\n \"name\": \"Guinea\",\n \"code\": \"GN\",\n \"capital\": \"Conakry\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"GNF\",\n \"name\": \"Guinean franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/gin.svg\",\n },\n {\n \"name\": \"Guinea-Bissau\",\n \"code\": \"GW\",\n \"capital\": \"Bissau\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"name\": \"Portuguese\",\n },\n \"flag\": \"https://restcountries.eu/data/gnb.svg\"\n },\n {\n \"name\": \"Guyana\",\n \"code\": \"GY\",\n \"capital\": \"Georgetown\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"GYD\",\n \"name\": \"Guyanese dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/guy.svg\"\n },\n {\n \"name\": \"Haiti\",\n \"code\": \"HT\",\n \"capital\": \"Port-au-Prince\",\n \"region\": \"Americas\",\n \"currency\": {\n \"code\": \"HTG\",\n \"name\": \"Haitian gourde\",\n \"symbol\": \"G\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/hti.svg\"\n },\n // {\n // \"name\": \"Heard Island and McDonald Islands\",\n // \"code\": \"HM\",\n // \"capital\": \"\",\n // \"region\": \"\",\n // \"currency\": {\n // \"code\": \"AUD\",\n // \"name\": \"Australian dollar\",\n // \"symbol\": \"$\"\n // },\n // \"language\": {\n // \"code\": \"en\",\n // \"name\": \"English\",\n // },\n // \"flag\": \"https://restcountries.eu/data/hmd.svg\"\n // },\n {\n \"name\": \"Holy See\",\n \"code\": \"VA\",\n \"capital\": \"Rome\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/vat.svg\"\n },\n {\n \"name\": \"Honduras\",\n \"code\": \"HN\",\n \"capital\": \"Tegucigalpa\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"HNL\",\n \"name\": \"Honduran lempira\",\n \"symbol\": \"L\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/hnd.svg\"\n },\n {\n \"name\": \"Hong Kong\",\n \"code\": \"HK\",\n \"capital\": \"City of Victoria\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"HKD\",\n \"name\": \"Hong Kong dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/hkg.svg\"\n },\n {\n \"name\": \"Hungary\",\n \"code\": \"HU\",\n \"capital\": \"Budapest\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"HUF\",\n \"name\": \"Hungarian forint\",\n \"symbol\": \"Ft\"\n },\n \"language\": {\n \"code\": \"hu\",\n \"name\": \"Hungarian\",\n },\n \"flag\": \"https://restcountries.eu/data/hun.svg\"\n },\n {\n \"name\": \"Iceland\",\n \"code\": \"IS\",\n \"capital\": \"Reykjavík\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"ISK\",\n \"name\": \"Icelandic króna\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"is\",\n \"name\": \"Icelandic\",\n },\n \"flag\": \"https://restcountries.eu/data/isl.svg\"\n },\n {\n \"name\": \"India\",\n \"code\": \"IN\",\n \"capital\": \"New Delhi\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"INR\",\n \"name\": \"Indian rupee\",\n \"symbol\": \"₹\"\n },\n \"language\": {\n \"code\": \"hi\",\n \"name\": \"Hindi\",\n },\n \"flag\": \"https://restcountries.eu/data/ind.svg\"\n },\n {\n \"name\": \"Indonesia\",\n \"code\": \"ID\",\n \"capital\": \"Jakarta\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"IDR\",\n \"name\": \"Indonesian rupiah\",\n \"symbol\": \"Rp\"\n },\n \"language\": {\n \"code\": \"id\",\n \"name\": \"Indonesian\",\n },\n \"flag\": \"https://restcountries.eu/data/idn.svg\"\n },\n {\n \"name\": \"Côte d'Ivoire\",\n \"code\": \"CI\",\n \"capital\": \"Yamoussoukro\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/civ.svg\"\n },\n {\n \"name\": \"Iran (Islamic Republic of)\",\n \"code\": \"IR\",\n \"capital\": \"Tehran\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"IRR\",\n \"name\": \"Iranian rial\",\n \"symbol\": \"﷼\"\n },\n \"language\": {\n \"code\": \"fa\",\n \"name\": \"Persian (Farsi)\",\n },\n \"flag\": \"https://restcountries.eu/data/irn.svg\"\n },\n {\n \"name\": \"Iraq\",\n \"code\": \"IQ\",\n \"capital\": \"Baghdad\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"IQD\",\n \"name\": \"Iraqi dinar\",\n \"symbol\": \"ع.د\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/irq.svg\"\n },\n {\n \"name\": \"Ireland\",\n \"code\": \"IE\",\n \"capital\": \"Dublin\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"ga\",\n \"name\": \"Irish\",\n },\n \"flag\": \"https://restcountries.eu/data/irl.svg\"\n },\n {\n \"name\": \"Isle of Man\",\n \"code\": \"IM\",\n \"capital\": \"Douglas\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"GBP\",\n \"name\": \"British pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/imn.svg\"\n },\n {\n \"name\": \"Israel\",\n \"code\": \"IL\",\n \"capital\": \"Jerusalem\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"ILS\",\n \"name\": \"Israeli new shekel\",\n \"symbol\": \"₪\"\n },\n \"language\": {\n \"code\": \"he\",\n \"name\": \"Hebrew (modern)\",\n },\n \"flag\": \"https://restcountries.eu/data/isr.svg\"\n },\n {\n \"name\": \"Italy\",\n \"code\": \"IT\",\n \"capital\": \"Rome\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"it\",\n \"name\": \"Italian\",\n },\n \"flag\": \"https://restcountries.eu/data/ita.svg\"\n },\n {\n \"name\": \"Jamaica\",\n \"code\": \"JM\",\n \"capital\": \"Kingston\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"JMD\",\n \"name\": \"Jamaican dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/jam.svg\"\n },\n {\n \"name\": \"Japan\",\n \"code\": \"JP\",\n \"capital\": \"Tokyo\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"JPY\",\n \"name\": \"Japanese yen\",\n \"symbol\": \"¥\"\n },\n \"language\": {\n \"code\": \"ja\",\n \"name\": \"Japanese\",\n },\n \"flag\": \"https://restcountries.eu/data/jpn.svg\"\n },\n {\n \"name\": \"Jersey\",\n \"code\": \"JE\",\n \"capital\": \"Saint Helier\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"GBP\",\n \"name\": \"British pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"iso639_2\": \"eng\",\n \"name\": \"English\",\n \"nativeName\": \"English\"\n },\n \"flag\": \"https://restcountries.eu/data/jey.svg\"\n },\n {\n \"name\": \"Jordan\",\n \"code\": \"JO\",\n \"capital\": \"Amman\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"JOD\",\n \"name\": \"Jordanian dinar\",\n \"symbol\": \"د.ا\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/jor.svg\"\n },\n {\n \"name\": \"Kazakhstan\",\n \"code\": \"KZ\",\n \"capital\": \"Astana\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"KZT\",\n \"name\": \"Kazakhstani tenge\",\n \"symbol\": null\n },\n \"language\": {\n \"code\": \"kk\",\n \"name\": \"Kazakh\",\n },\n \"flag\": \"https://restcountries.eu/data/kaz.svg\"\n },\n {\n \"name\": \"Kenya\",\n \"code\": \"KE\",\n \"capital\": \"Nairobi\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"KES\",\n \"name\": \"Kenyan shilling\",\n \"symbol\": \"Sh\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/ken.svg\"\n },\n {\n \"name\": \"Kiribati\",\n \"code\": \"KI\",\n \"capital\": \"South Tarawa\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"AUD\",\n \"name\": \"Australian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/kir.svg\"\n },\n {\n \"name\": \"Kuwait\",\n \"code\": \"KW\",\n \"capital\": \"Kuwait City\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"KWD\",\n \"name\": \"Kuwaiti dinar\",\n \"symbol\": \"د.ك\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/kwt.svg\"\n },\n {\n \"name\": \"Kyrgyzstan\",\n \"code\": \"KG\",\n \"capital\": \"Bishkek\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"KGS\",\n \"name\": \"Kyrgyzstani som\",\n \"symbol\": \"с\"\n },\n \"language\": {\n \"code\": \"ky\",\n \"name\": \"Kyrgyz\",\n },\n \"flag\": \"https://restcountries.eu/data/kgz.svg\"\n },\n {\n \"name\": \"Lao People's Democratic Republic\",\n \"code\": \"LA\",\n \"capital\": \"Vientiane\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"LAK\",\n \"name\": \"Lao kip\",\n \"symbol\": \"₭\"\n },\n \"language\": {\n \"code\": \"lo\",\n \"name\": \"Lao\",\n },\n \"flag\": \"https://restcountries.eu/data/lao.svg\"\n },\n {\n \"name\": \"Latvia\",\n \"code\": \"LV\",\n \"capital\": \"Riga\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"lv\",\n \"name\": \"Latvian\",\n },\n \"flag\": \"https://restcountries.eu/data/lva.svg\"\n },\n {\n \"name\": \"Lebanon\",\n \"code\": \"LB\",\n \"capital\": \"Beirut\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"LBP\",\n \"name\": \"Lebanese pound\",\n \"symbol\": \"ل.ل\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/lbn.svg\"\n },\n {\n \"name\": \"Lesotho\",\n \"code\": \"LS\",\n \"capital\": \"Maseru\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"LSL\",\n \"name\": \"Lesotho loti\",\n \"symbol\": \"L\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/lso.svg\"\n },\n {\n \"name\": \"Liberia\",\n \"code\": \"LR\",\n \"capital\": \"Monrovia\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"LRD\",\n \"name\": \"Liberian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/lbr.svg\"\n },\n {\n \"name\": \"Libya\",\n \"code\": \"LY\",\n \"capital\": \"Tripoli\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"LYD\",\n \"name\": \"Libyan dinar\",\n \"symbol\": \"ل.د\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/lby.svg\"\n },\n {\n \"name\": \"Liechtenstein\",\n \"code\": \"LI\",\n \"capital\": \"Vaduz\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"CHF\",\n \"name\": \"Swiss franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"de\",\n \"name\": \"German\",\n },\n \"flag\": \"https://restcountries.eu/data/lie.svg\"\n },\n {\n \"name\": \"Lithuania\",\n \"code\": \"LT\",\n \"capital\": \"Vilnius\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"lt\",\n \"name\": \"Lithuanian\",\n },\n \"flag\": \"https://restcountries.eu/data/ltu.svg\"\n },\n {\n \"name\": \"Luxembourg\",\n \"code\": \"LU\",\n \"capital\": \"Luxembourg\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/lux.svg\"\n },\n {\n \"name\": \"Macao\",\n \"code\": \"MO\",\n \"capital\": \"\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"MOP\",\n \"name\": \"Macanese pataca\",\n \"symbol\": \"P\"\n },\n \"language\": {\n \"code\": \"zh\",\n \"name\": \"Chinese\",\n },\n \"flag\": \"https://restcountries.eu/data/mac.svg\"\n },\n {\n \"name\": \"Macedonia (the former Yugoslav Republic of)\",\n \"code\": \"MK\",\n \"capital\": \"Skopje\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"MKD\",\n \"name\": \"Macedonian denar\",\n \"symbol\": \"ден\"\n },\n \"language\": {\n \"code\": \"mk\",\n \"name\": \"Macedonian\",\n },\n \"flag\": \"https://restcountries.eu/data/mkd.svg\"\n },\n {\n \"name\": \"Madagascar\",\n \"code\": \"MG\",\n \"capital\": \"Antananarivo\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"MGA\",\n \"name\": \"Malagasy ariary\",\n \"symbol\": \"Ar\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/mdg.svg\"\n },\n {\n \"name\": \"Malawi\",\n \"code\": \"MW\",\n \"capital\": \"Lilongwe\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"MWK\",\n \"name\": \"Malawian kwacha\",\n \"symbol\": \"MK\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/mwi.svg\"\n },\n {\n \"name\": \"Malaysia\",\n \"code\": \"MY\",\n \"capital\": \"Kuala Lumpur\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"MYR\",\n \"name\": \"Malaysian ringgit\",\n \"symbol\": \"RM\"\n },\n \"language\": {\n \"code\": null,\n \"name\": \"Malaysian\",\n },\n \"flag\": \"https://restcountries.eu/data/mys.svg\"\n },\n {\n \"name\": \"Maldives\",\n \"code\": \"MV\",\n \"capital\": \"Malé\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"MVR\",\n \"name\": \"Maldivian rufiyaa\",\n \"symbol\": \".ރ\"\n },\n \"language\": {\n \"code\": \"dv\",\n \"name\": \"Divehi\",\n },\n \"flag\": \"https://restcountries.eu/data/mdv.svg\"\n },\n {\n \"name\": \"Mali\",\n \"code\": \"ML\",\n \"capital\": \"Bamako\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/mli.svg\"\n },\n {\n \"name\": \"Malta\",\n \"code\": \"MT\",\n \"capital\": \"Valletta\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"mt\",\n \"name\": \"Maltese\",\n },\n \"flag\": \"https://restcountries.eu/data/mlt.svg\"\n },\n {\n \"name\": \"Marshall Islands\",\n \"code\": \"MH\",\n \"capital\": \"Majuro\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/mhl.svg\"\n },\n {\n \"name\": \"Martinique\",\n \"code\": \"MQ\",\n \"capital\": \"Fort-de-France\",\n \"region\": \"Americas\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/mtq.svg\"\n },\n {\n \"name\": \"Mauritania\",\n \"code\": \"MR\",\n \"capital\": \"Nouakchott\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"MRO\",\n \"name\": \"Mauritanian ouguiya\",\n \"symbol\": \"UM\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/mrt.svg\"\n },\n {\n \"name\": \"Mauritius\",\n \"code\": \"MU\",\n \"capital\": \"Port Louis\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"MUR\",\n \"name\": \"Mauritian rupee\",\n \"symbol\": \"₨\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/mus.svg\"\n },\n {\n \"name\": \"Mayotte\",\n \"code\": \"YT\",\n \"capital\": \"Mamoudzou\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/myt.svg\"\n },\n {\n \"name\": \"Mexico\",\n \"code\": \"MX\",\n \"capital\": \"Mexico City\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"MXN\",\n \"name\": \"Mexican peso\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/mex.svg\"\n },\n {\n \"name\": \"Micronesia (Federated States of)\",\n \"code\": \"FM\",\n \"capital\": \"Palikir\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/fsm.svg\"\n },\n {\n \"name\": \"Moldova (Republic of)\",\n \"code\": \"MD\",\n \"capital\": \"Chișinău\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"MDL\",\n \"name\": \"Moldovan leu\",\n \"symbol\": \"L\"\n },\n \"language\": {\n \"code\": \"ro\",\n \"name\": \"Romanian\",\n },\n \"flag\": \"https://restcountries.eu/data/mda.svg\"\n },\n {\n \"name\": \"Monaco\",\n \"code\": \"MC\",\n \"capital\": \"Monaco\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/mco.svg\"\n },\n {\n \"name\": \"Mongolia\",\n \"code\": \"MN\",\n \"capital\": \"Ulan Bator\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"MNT\",\n \"name\": \"Mongolian tögrög\",\n \"symbol\": \"₮\"\n },\n \"language\": {\n \"code\": \"mn\",\n \"name\": \"Mongolian\",\n },\n \"flag\": \"https://restcountries.eu/data/mng.svg\"\n },\n {\n \"name\": \"Montenegro\",\n \"code\": \"ME\",\n \"capital\": \"Podgorica\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"sr\",\n \"name\": \"Serbian\",\n },\n \"flag\": \"https://restcountries.eu/data/mne.svg\"\n },\n {\n \"name\": \"Montserrat\",\n \"code\": \"MS\",\n \"capital\": \"Plymouth\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/msr.svg\"\n },\n {\n \"name\": \"Morocco\",\n \"code\": \"MA\",\n \"capital\": \"Rabat\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"MAD\",\n \"name\": \"Moroccan dirham\",\n \"symbol\": \"د.م.\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/mar.svg\"\n },\n {\n \"name\": \"Mozambique\",\n \"code\": \"MZ\",\n \"capital\": \"Maputo\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"MZN\",\n \"name\": \"Mozambican metical\",\n \"symbol\": \"MT\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"name\": \"Portuguese\",\n },\n \"flag\": \"https://restcountries.eu/data/moz.svg\"\n },\n {\n \"name\": \"Myanmar\",\n \"code\": \"MM\",\n \"capital\": \"Naypyidaw\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"MMK\",\n \"name\": \"Burmese kyat\",\n \"symbol\": \"Ks\"\n },\n \"language\": {\n \"code\": \"my\",\n \"name\": \"Burmese\",\n },\n \"flag\": \"https://restcountries.eu/data/mmr.svg\"\n },\n {\n \"name\": \"Namibia\",\n \"code\": \"NA\",\n \"capital\": \"Windhoek\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"NAD\",\n \"name\": \"Namibian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/nam.svg\"\n },\n {\n \"name\": \"Nauru\",\n \"code\": \"NR\",\n \"capital\": \"Yaren\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"AUD\",\n \"name\": \"Australian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/nru.svg\"\n },\n {\n \"name\": \"Nepal\",\n \"code\": \"NP\",\n \"capital\": \"Kathmandu\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"NPR\",\n \"name\": \"Nepalese rupee\",\n \"symbol\": \"₨\"\n },\n \"language\": {\n \"code\": \"ne\",\n \"name\": \"Nepali\",\n },\n \"flag\": \"https://restcountries.eu/data/npl.svg\"\n },\n {\n \"name\": \"Netherlands\",\n \"code\": \"NL\",\n \"capital\": \"Amsterdam\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"nl\",\n \"name\": \"Dutch\",\n },\n \"flag\": \"https://restcountries.eu/data/nld.svg\"\n },\n {\n \"name\": \"New Caledonia\",\n \"code\": \"NC\",\n \"capital\": \"Nouméa\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"XPF\",\n \"name\": \"CFP franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/ncl.svg\"\n },\n {\n \"name\": \"New Zealand\",\n \"code\": \"NZ\",\n \"capital\": \"Wellington\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"NZD\",\n \"name\": \"New Zealand dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/nzl.svg\"\n },\n {\n \"name\": \"Nicaragua\",\n \"code\": \"NI\",\n \"capital\": \"Managua\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"NIO\",\n \"name\": \"Nicaraguan córdoba\",\n \"symbol\": \"C$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/nic.svg\"\n },\n {\n \"name\": \"Niger\",\n \"code\": \"NE\",\n \"capital\": \"Niamey\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/ner.svg\"\n },\n {\n \"name\": \"Nigeria\",\n \"code\": \"NG\",\n \"capital\": \"Abuja\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"NGN\",\n \"name\": \"Nigerian naira\",\n \"symbol\": \"₦\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/nga.svg\"\n },\n {\n \"name\": \"Niue\",\n \"code\": \"NU\",\n \"capital\": \"Alofi\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"NZD\",\n \"name\": \"New Zealand dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/niu.svg\"\n },\n {\n \"name\": \"Norfolk Island\",\n \"code\": \"NF\",\n \"capital\": \"Kingston\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"AUD\",\n \"name\": \"Australian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/nfk.svg\"\n },\n {\n \"name\": \"Korea (Democratic People's Republic of)\",\n \"code\": \"KP\",\n \"capital\": \"Pyongyang\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"KPW\",\n \"name\": \"North Korean won\",\n \"symbol\": \"₩\"\n },\n \"language\": {\n \"code\": \"ko\",\n \"name\": \"Korean\",\n },\n \"flag\": \"https://restcountries.eu/data/prk.svg\"\n },\n {\n \"name\": \"Northern Mariana Islands\",\n \"code\": \"MP\",\n \"capital\": \"Saipan\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/mnp.svg\"\n },\n {\n \"name\": \"Norway\",\n \"code\": \"NO\",\n \"capital\": \"Oslo\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"NOK\",\n \"name\": \"Norwegian krone\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"no\",\n \"name\": \"Norwegian\",\n },\n \"flag\": \"https://restcountries.eu/data/nor.svg\"\n },\n {\n \"name\": \"Oman\",\n \"code\": \"OM\",\n \"capital\": \"Muscat\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"OMR\",\n \"name\": \"Omani rial\",\n \"symbol\": \"ر.ع.\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/omn.svg\"\n },\n {\n \"name\": \"Pakistan\",\n \"code\": \"PK\",\n \"capital\": \"Islamabad\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"PKR\",\n \"name\": \"Pakistani rupee\",\n \"symbol\": \"₨\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/pak.svg\"\n },\n {\n \"name\": \"Palau\",\n \"code\": \"PW\",\n \"capital\": \"Ngerulmud\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/plw.svg\"\n },\n {\n \"name\": \"Palestine, State of\",\n \"code\": \"PS\",\n \"capital\": \"Ramallah\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"ILS\",\n \"name\": \"Israeli new sheqel\",\n \"symbol\": \"₪\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/pse.svg\"\n },\n {\n \"name\": \"Panama\",\n \"code\": \"PA\",\n \"capital\": \"Panama City\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/pan.svg\"\n },\n {\n \"name\": \"Papua New Guinea\",\n \"code\": \"PG\",\n \"capital\": \"Port Moresby\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"PGK\",\n \"name\": \"Papua New Guinean kina\",\n \"symbol\": \"K\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/png.svg\"\n },\n {\n \"name\": \"Paraguay\",\n \"code\": \"PY\",\n \"capital\": \"Asunción\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"PYG\",\n \"name\": \"Paraguayan guaraní\",\n \"symbol\": \"₲\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/pry.svg\"\n },\n {\n \"name\": \"Peru\",\n \"code\": \"PE\",\n \"capital\": \"Lima\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"PEN\",\n \"name\": \"Peruvian sol\",\n \"symbol\": \"S/.\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/per.svg\"\n },\n {\n \"name\": \"Philippines\",\n \"code\": \"PH\",\n \"capital\": \"Manila\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"PHP\",\n \"name\": \"Philippine peso\",\n \"symbol\": \"₱\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/phl.svg\"\n },\n {\n \"name\": \"Pitcairn\",\n \"code\": \"PN\",\n \"capital\": \"Adamstown\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"NZD\",\n \"name\": \"New Zealand dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/pcn.svg\"\n },\n {\n \"name\": \"Poland\",\n \"code\": \"PL\",\n \"capital\": \"Warsaw\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"PLN\",\n \"name\": \"Polish złoty\",\n \"symbol\": \"zł\"\n },\n \"language\": {\n \"code\": \"pl\",\n \"name\": \"Polish\",\n },\n \"flag\": \"https://restcountries.eu/data/pol.svg\"\n },\n {\n \"name\": \"Portugal\",\n \"code\": \"PT\",\n \"capital\": \"Lisbon\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"name\": \"Portuguese\",\n },\n \"flag\": \"https://restcountries.eu/data/prt.svg\"\n },\n {\n \"name\": \"Puerto Rico\",\n \"code\": \"PR\",\n \"capital\": \"San Juan\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/pri.svg\"\n },\n {\n \"name\": \"Qatar\",\n \"code\": \"QA\",\n \"capital\": \"Doha\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"QAR\",\n \"name\": \"Qatari riyal\",\n \"symbol\": \"ر.ق\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/qat.svg\"\n },\n {\n \"name\": \"Republic of Kosovo\",\n \"code\": \"XK\",\n \"capital\": \"Pristina\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"sq\",\n \"name\": \"Albanian\",\n },\n \"flag\": \"https://restcountries.eu/data/kos.svg\"\n },\n {\n \"name\": \"Réunion\",\n \"code\": \"RE\",\n \"capital\": \"Saint-Denis\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/reu.svg\"\n },\n {\n \"name\": \"Romania\",\n \"code\": \"RO\",\n \"capital\": \"Bucharest\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"RON\",\n \"name\": \"Romanian leu\",\n \"symbol\": \"lei\"\n },\n \"language\": {\n \"code\": \"ro\",\n \"name\": \"Romanian\",\n },\n \"flag\": \"https://restcountries.eu/data/rou.svg\"\n },\n {\n \"name\": \"Russian Federation\",\n \"code\": \"RU\",\n \"capital\": \"Moscow\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"RUB\",\n \"name\": \"Russian ruble\",\n \"symbol\": \"₽\"\n },\n \"language\": {\n \"code\": \"ru\",\n \"name\": \"Russian\",\n },\n \"flag\": \"https://restcountries.eu/data/rus.svg\"\n },\n {\n \"name\": \"Rwanda\",\n \"code\": \"RW\",\n \"capital\": \"Kigali\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"RWF\",\n \"name\": \"Rwandan franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"rw\",\n \"name\": \"Kinyarwanda\",\n },\n \"flag\": \"https://restcountries.eu/data/rwa.svg\"\n },\n {\n \"name\": \"Saint Barthélemy\",\n \"code\": \"BL\",\n \"capital\": \"Gustavia\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/blm.svg\"\n },\n {\n \"name\": \"Saint Helena, Ascension and Tristan da Cunha\",\n \"code\": \"SH\",\n \"capital\": \"Jamestown\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"SHP\",\n \"name\": \"Saint Helena pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/shn.svg\"\n },\n {\n \"name\": \"Saint Kitts and Nevis\",\n \"code\": \"KN\",\n \"capital\": \"Basseterre\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/kna.svg\"\n },\n {\n \"name\": \"Saint Lucia\",\n \"code\": \"LC\",\n \"capital\": \"Castries\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/lca.svg\"\n },\n {\n \"name\": \"Saint Martin (French part)\",\n \"code\": \"MF\",\n \"capital\": \"Marigot\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/maf.svg\"\n },\n {\n \"name\": \"Saint Pierre and Miquelon\",\n \"code\": \"PM\",\n \"capital\": \"Saint-Pierre\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/spm.svg\"\n },\n {\n \"name\": \"Saint Vincent and the Grenadines\",\n \"code\": \"VC\",\n \"capital\": \"Kingstown\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"XCD\",\n \"name\": \"East Caribbean dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/vct.svg\"\n },\n {\n \"name\": \"Samoa\",\n \"code\": \"WS\",\n \"capital\": \"Apia\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"WST\",\n \"name\": \"Samoan tālā\",\n \"symbol\": \"T\"\n },\n \"language\": {\n \"code\": \"sm\",\n \"name\": \"Samoan\",\n },\n \"flag\": \"https://restcountries.eu/data/wsm.svg\"\n },\n {\n \"name\": \"San Marino\",\n \"code\": \"SM\",\n \"capital\": \"City of San Marino\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"it\",\n \"name\": \"Italian\",\n },\n \"flag\": \"https://restcountries.eu/data/smr.svg\"\n },\n {\n \"name\": \"Sao Tome and Principe\",\n \"code\": \"ST\",\n \"capital\": \"São Tomé\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"STD\",\n \"name\": \"São Tomé and Príncipe dobra\",\n \"symbol\": \"Db\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"name\": \"Portuguese\",\n },\n \"flag\": \"https://restcountries.eu/data/stp.svg\"\n },\n {\n \"name\": \"Saudi Arabia\",\n \"code\": \"SA\",\n \"capital\": \"Riyadh\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"SAR\",\n \"name\": \"Saudi riyal\",\n \"symbol\": \"ر.س\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/sau.svg\"\n },\n {\n \"name\": \"Senegal\",\n \"code\": \"SN\",\n \"capital\": \"Dakar\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/sen.svg\"\n },\n {\n \"name\": \"Serbia\",\n \"code\": \"RS\",\n \"capital\": \"Belgrade\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"RSD\",\n \"name\": \"Serbian dinar\",\n \"symbol\": \"дин.\"\n },\n \"language\": {\n \"code\": \"sr\",\n \"name\": \"Serbian\",\n },\n \"flag\": \"https://restcountries.eu/data/srb.svg\"\n },\n {\n \"name\": \"Seychelles\",\n \"code\": \"SC\",\n \"capital\": \"Victoria\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"SCR\",\n \"name\": \"Seychellois rupee\",\n \"symbol\": \"₨\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/syc.svg\"\n },\n {\n \"name\": \"Sierra Leone\",\n \"code\": \"SL\",\n \"capital\": \"Freetown\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"SLL\",\n \"name\": \"Sierra Leonean leone\",\n \"symbol\": \"Le\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/sle.svg\"\n },\n {\n \"name\": \"Singapore\",\n \"code\": \"SG\",\n \"capital\": \"Singapore\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"SGD\",\n \"name\": \"Singapore dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/sgp.svg\"\n },\n {\n \"name\": \"Sint Maarten (Dutch part)\",\n \"code\": \"SX\",\n \"capital\": \"Philipsburg\",\n \"region\": \"Americas\",\n \"currency\": {\n \"code\": \"ANG\",\n \"name\": \"Netherlands Antillean guilder\",\n \"symbol\": \"ƒ\"\n },\n \"language\": {\n \"code\": \"nl\",\n \"name\": \"Dutch\",\n },\n \"flag\": \"https://restcountries.eu/data/sxm.svg\"\n },\n {\n \"name\": \"Slovakia\",\n \"code\": \"SK\",\n \"capital\": \"Bratislava\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"sk\",\n \"name\": \"Slovak\",\n },\n \"flag\": \"https://restcountries.eu/data/svk.svg\"\n },\n {\n \"name\": \"Slovenia\",\n \"code\": \"SI\",\n \"capital\": \"Ljubljana\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"sl\",\n \"name\": \"Slovene\",\n },\n \"flag\": \"https://restcountries.eu/data/svn.svg\"\n },\n {\n \"name\": \"Solomon Islands\",\n \"code\": \"SB\",\n \"capital\": \"Honiara\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"SBD\",\n \"name\": \"Solomon Islands dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/slb.svg\"\n },\n {\n \"name\": \"Somalia\",\n \"code\": \"SO\",\n \"capital\": \"Mogadishu\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"SOS\",\n \"name\": \"Somali shilling\",\n \"symbol\": \"Sh\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/som.svg\"\n },\n {\n \"name\": \"South Africa\",\n \"code\": \"ZA\",\n \"capital\": \"Pretoria\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"ZAR\",\n \"name\": \"South African rand\",\n \"symbol\": \"R\"\n },\n \"language\": {\n \"code\": \"en\",\n \"iso639_2\": \"eng\",\n \"name\": \"English\",\n \"nativeName\": \"English\"\n },\n \"flag\": \"https://restcountries.eu/data/zaf.svg\"\n },\n {\n \"name\": \"South Georgia and the South Sandwich Islands\",\n \"code\": \"GS\",\n \"capital\": \"King Edward Point\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"GBP\",\n \"name\": \"British pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/sgs.svg\"\n },\n {\n \"name\": \"Korea (Republic of)\",\n \"code\": \"KR\",\n \"capital\": \"Seoul\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"KRW\",\n \"name\": \"South Korean won\",\n \"symbol\": \"₩\"\n },\n \"language\": {\n \"code\": \"ko\",\n \"name\": \"Korean\",\n },\n \"flag\": \"https://restcountries.eu/data/kor.svg\"\n },\n {\n \"name\": \"South Sudan\",\n \"code\": \"SS\",\n \"capital\": \"Juba\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"SSP\",\n \"name\": \"South Sudanese pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/ssd.svg\"\n },\n {\n \"name\": \"Spain\",\n \"code\": \"ES\",\n \"capital\": \"Madrid\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"EUR\",\n \"name\": \"Euro\",\n \"symbol\": \"€\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/esp.svg\"\n },\n {\n \"name\": \"Sri Lanka\",\n \"code\": \"LK\",\n \"capital\": \"Colombo\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"LKR\",\n \"name\": \"Sri Lankan rupee\",\n \"symbol\": \"Rs\"\n },\n \"language\": {\n \"code\": \"si\",\n \"iso639_2\": \"sin\",\n \"name\": \"Sinhalese\",\n \"nativeName\": \"සිංහල\"\n },\n \"flag\": \"https://restcountries.eu/data/lka.svg\"\n },\n {\n \"name\": \"Sudan\",\n \"code\": \"SD\",\n \"capital\": \"Khartoum\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"SDG\",\n \"name\": \"Sudanese pound\",\n \"symbol\": \"ج.س.\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/sdn.svg\"\n },\n {\n \"name\": \"Suriname\",\n \"code\": \"SR\",\n \"capital\": \"Paramaribo\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"SRD\",\n \"name\": \"Surinamese dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"nl\",\n \"name\": \"Dutch\",\n },\n \"flag\": \"https://restcountries.eu/data/sur.svg\"\n },\n {\n \"name\": \"Svalbard and Jan Mayen\",\n \"code\": \"SJ\",\n \"capital\": \"Longyearbyen\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"NOK\",\n \"name\": \"Norwegian krone\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"no\",\n \"name\": \"Norwegian\",\n },\n \"flag\": \"https://restcountries.eu/data/sjm.svg\"\n },\n {\n \"name\": \"Swaziland\",\n \"code\": \"SZ\",\n \"capital\": \"Lobamba\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"SZL\",\n \"name\": \"Swazi lilangeni\",\n \"symbol\": \"L\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/swz.svg\"\n },\n {\n \"name\": \"Sweden\",\n \"code\": \"SE\",\n \"capital\": \"Stockholm\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"SEK\",\n \"name\": \"Swedish krona\",\n \"symbol\": \"kr\"\n },\n \"language\": {\n \"code\": \"sv\",\n \"name\": \"Swedish\",\n },\n \"flag\": \"https://restcountries.eu/data/swe.svg\"\n },\n {\n \"name\": \"Switzerland\",\n \"code\": \"CH\",\n \"capital\": \"Bern\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"CHF\",\n \"name\": \"Swiss franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"de\",\n \"name\": \"German\",\n },\n \"flag\": \"https://restcountries.eu/data/che.svg\"\n },\n {\n \"name\": \"Syrian Arab Republic\",\n \"code\": \"SY\",\n \"capital\": \"Damascus\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"SYP\",\n \"name\": \"Syrian pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/syr.svg\"\n },\n {\n \"name\": \"Taiwan\",\n \"code\": \"TW\",\n \"capital\": \"Taipei\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"TWD\",\n \"name\": \"New Taiwan dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"zh\",\n \"name\": \"Chinese\",\n },\n \"flag\": \"https://restcountries.eu/data/twn.svg\"\n },\n {\n \"name\": \"Tajikistan\",\n \"code\": \"TJ\",\n \"capital\": \"Dushanbe\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"TJS\",\n \"name\": \"Tajikistani somoni\",\n \"symbol\": \"ЅМ\"\n },\n \"language\": {\n \"code\": \"tg\",\n \"name\": \"Tajik\",\n },\n \"flag\": \"https://restcountries.eu/data/tjk.svg\"\n },\n {\n \"name\": \"Tanzania, United Republic of\",\n \"code\": \"TZ\",\n \"capital\": \"Dodoma\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"TZS\",\n \"name\": \"Tanzanian shilling\",\n \"symbol\": \"Sh\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/tza.svg\"\n },\n {\n \"name\": \"Thailand\",\n \"code\": \"TH\",\n \"capital\": \"Bangkok\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"THB\",\n \"name\": \"Thai baht\",\n \"symbol\": \"฿\"\n },\n \"language\": {\n \"code\": \"th\",\n \"name\": \"Thai\",\n },\n \"flag\": \"https://restcountries.eu/data/tha.svg\"\n },\n {\n \"name\": \"Timor-Leste\",\n \"code\": \"TL\",\n \"capital\": \"Dili\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"pt\",\n \"name\": \"Portuguese\",\n },\n \"flag\": \"https://restcountries.eu/data/tls.svg\"\n },\n {\n \"name\": \"Togo\",\n \"code\": \"TG\",\n \"capital\": \"Lomé\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"XOF\",\n \"name\": \"West African CFA franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/tgo.svg\"\n },\n {\n \"name\": \"Tokelau\",\n \"code\": \"TK\",\n \"capital\": \"Fakaofo\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"NZD\",\n \"name\": \"New Zealand dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/tkl.svg\"\n },\n {\n \"name\": \"Tonga\",\n \"code\": \"TO\",\n \"capital\": \"Nuku'alofa\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"TOP\",\n \"name\": \"Tongan paʻanga\",\n \"symbol\": \"T$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/ton.svg\"\n },\n {\n \"name\": \"Trinidad and Tobago\",\n \"code\": \"TT\",\n \"capital\": \"Port of Spain\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"TTD\",\n \"name\": \"Trinidad and Tobago dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/tto.svg\"\n },\n {\n \"name\": \"Tunisia\",\n \"code\": \"TN\",\n \"capital\": \"Tunis\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"TND\",\n \"name\": \"Tunisian dinar\",\n \"symbol\": \"د.ت\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/tun.svg\"\n },\n {\n \"name\": \"Turkey\",\n \"code\": \"TR\",\n \"capital\": \"Ankara\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"TRY\",\n \"name\": \"Turkish lira\",\n \"symbol\": null\n },\n \"language\": {\n \"code\": \"tr\",\n \"name\": \"Turkish\",\n },\n \"flag\": \"https://restcountries.eu/data/tur.svg\"\n },\n {\n \"name\": \"Turkmenistan\",\n \"code\": \"TM\",\n \"capital\": \"Ashgabat\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"TMT\",\n \"name\": \"Turkmenistan manat\",\n \"symbol\": \"m\"\n },\n \"language\": {\n \"code\": \"tk\",\n \"name\": \"Turkmen\",\n },\n \"flag\": \"https://restcountries.eu/data/tkm.svg\"\n },\n {\n \"name\": \"Turks and Caicos Islands\",\n \"code\": \"TC\",\n \"capital\": \"Cockburn Town\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/tca.svg\"\n },\n {\n \"name\": \"Tuvalu\",\n \"code\": \"TV\",\n \"capital\": \"Funafuti\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"AUD\",\n \"name\": \"Australian dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/tuv.svg\"\n },\n {\n \"name\": \"Uganda\",\n \"code\": \"UG\",\n \"capital\": \"Kampala\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"UGX\",\n \"name\": \"Ugandan shilling\",\n \"symbol\": \"Sh\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/uga.svg\"\n },\n {\n \"name\": \"Ukraine\",\n \"code\": \"UA\",\n \"capital\": \"Kiev\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"UAH\",\n \"name\": \"Ukrainian hryvnia\",\n \"symbol\": \"₴\"\n },\n \"language\": {\n \"code\": \"uk\",\n \"name\": \"Ukrainian\",\n },\n \"flag\": \"https://restcountries.eu/data/ukr.svg\"\n },\n {\n \"name\": \"United Arab Emirates\",\n \"code\": \"AE\",\n \"capital\": \"Abu Dhabi\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"AED\",\n \"name\": \"United Arab Emirates dirham\",\n \"symbol\": \"د.إ\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/are.svg\"\n },\n {\n // \"name\": \"United Kingdom of Great Britain and Northern Ireland\",\n \"name\": \"United Kingdom\",\n \"code\": \"GB\",\n \"capital\": \"London\",\n \"region\": \"EU\",\n \"currency\": {\n \"code\": \"GBP\",\n \"name\": \"British pound\",\n \"symbol\": \"£\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/gbr.svg\"\n },\n {\n \"name\": \"United States of America\",\n \"code\": \"US\",\n \"capital\": \"Washington, D.C.\",\n \"region\": \"NA\",\n \"currency\": {\n \"code\": \"USD\",\n \"name\": \"United States dollar\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"en\",\n \"iso639_2\": \"eng\",\n \"name\": \"English\",\n \"nativeName\": \"English\"\n },\n \"flag\": \"https://restcountries.eu/data/usa.svg\"\n },\n {\n \"name\": \"Uruguay\",\n \"code\": \"UY\",\n \"capital\": \"Montevideo\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"UYU\",\n \"name\": \"Uruguayan peso\",\n \"symbol\": \"$\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/ury.svg\"\n },\n {\n \"name\": \"Uzbekistan\",\n \"code\": \"UZ\",\n \"capital\": \"Tashkent\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"UZS\",\n \"name\": \"Uzbekistani so'm\",\n \"symbol\": null\n },\n \"language\": {\n \"code\": \"uz\",\n \"name\": \"Uzbek\",\n },\n \"flag\": \"https://restcountries.eu/data/uzb.svg\"\n },\n {\n \"name\": \"Vanuatu\",\n \"code\": \"VU\",\n \"capital\": \"Port Vila\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"VUV\",\n \"name\": \"Vanuatu vatu\",\n \"symbol\": \"Vt\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/vut.svg\"\n },\n {\n \"name\": \"Venezuela (Bolivarian Republic of)\",\n \"code\": \"VE\",\n \"capital\": \"Caracas\",\n \"region\": \"SA\",\n \"currency\": {\n \"code\": \"VEF\",\n \"name\": \"Venezuelan bolívar\",\n \"symbol\": \"Bs F\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/ven.svg\"\n },\n {\n \"name\": \"Viet Nam\",\n \"code\": \"VN\",\n \"capital\": \"Hanoi\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"VND\",\n \"name\": \"Vietnamese đồng\",\n \"symbol\": \"₫\"\n },\n \"language\": {\n \"code\": \"vi\",\n \"name\": \"Vietnamese\",\n },\n \"flag\": \"https://restcountries.eu/data/vnm.svg\"\n },\n {\n \"name\": \"Wallis and Futuna\",\n \"code\": \"WF\",\n \"capital\": \"Mata-Utu\",\n \"region\": \"OC\",\n \"currency\": {\n \"code\": \"XPF\",\n \"name\": \"CFP franc\",\n \"symbol\": \"Fr\"\n },\n \"language\": {\n \"code\": \"fr\",\n \"name\": \"French\",\n },\n \"flag\": \"https://restcountries.eu/data/wlf.svg\"\n },\n {\n \"name\": \"Western Sahara\",\n \"code\": \"EH\",\n \"capital\": \"El Aaiún\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"MAD\",\n \"name\": \"Moroccan dirham\",\n \"symbol\": \"د.م.\"\n },\n \"language\": {\n \"code\": \"es\",\n \"name\": \"Spanish\",\n },\n \"flag\": \"https://restcountries.eu/data/esh.svg\"\n },\n {\n \"name\": \"Yemen\",\n \"code\": \"YE\",\n \"capital\": \"Sana'a\",\n \"region\": \"AS\",\n \"currency\": {\n \"code\": \"YER\",\n \"name\": \"Yemeni rial\",\n \"symbol\": \"﷼\"\n },\n \"language\": {\n \"code\": \"ar\",\n \"name\": \"Arabic\",\n },\n \"flag\": \"https://restcountries.eu/data/yem.svg\"\n },\n {\n \"name\": \"Zambia\",\n \"code\": \"ZM\",\n \"capital\": \"Lusaka\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"ZMW\",\n \"name\": \"Zambian kwacha\",\n \"symbol\": \"ZK\"\n },\n \"language\": {\n \"code\": \"en\",\n \"name\": \"English\",\n },\n \"flag\": \"https://restcountries.eu/data/zmb.svg\"\n },\n {\n \"name\": \"Zimbabwe\",\n \"code\": \"ZW\",\n \"capital\": \"Harare\",\n \"region\": \"AF\",\n \"currency\": {\n \"code\": \"BWP\",\n \"name\": \"Botswana pula\",\n \"symbol\": \"P\"\n },\n \"language\": {\n \"code\": \"en\",\n \"iso639_2\": \"eng\",\n \"name\": \"English\",\n \"nativeName\": \"English\"\n },\n \"flag\": \"https://restcountries.eu/data/zwe.svg\"\n }\n];\n\n\nexport let countryGPS = [\n {\n \"country\": \"AD\",\n \"latitude\": 42.546245,\n \"longitude\": 1.601554,\n \"name\": \"Andorra\"\n },\n {\n \"country\": \"AE\",\n \"latitude\": 23.424076,\n \"longitude\": 53.847818,\n \"name\": \"United Arab Emirates\"\n },\n {\n \"country\": \"AF\",\n \"latitude\": 33.93911,\n \"longitude\": 67.709953,\n \"name\": \"Afghanistan\"\n },\n {\n \"country\": \"AG\",\n \"latitude\": 17.060816,\n \"longitude\": -61.796428,\n \"name\": \"Antigua and Barbuda\"\n },\n {\n \"country\": \"AI\",\n \"latitude\": 18.220554,\n \"longitude\": -63.068615,\n \"name\": \"Anguilla\"\n },\n {\n \"country\": \"AL\",\n \"latitude\": 41.153332,\n \"longitude\": 20.168331,\n \"name\": \"Albania\"\n },\n {\n \"country\": \"AM\",\n \"latitude\": 40.069099,\n \"longitude\": 45.038189,\n \"name\": \"Armenia\"\n },\n {\n \"country\": \"AN\",\n \"latitude\": 12.226079,\n \"longitude\": -69.060087,\n \"name\": \"Netherlands Antilles\"\n },\n {\n \"country\": \"AO\",\n \"latitude\": -11.202692,\n \"longitude\": 17.873887,\n \"name\": \"Angola\"\n },\n {\n \"country\": \"AQ\",\n \"latitude\": -75.250973,\n \"longitude\": -0.071389,\n \"name\": \"Antarctica\"\n },\n {\n \"country\": \"AR\",\n \"latitude\": -38.416097,\n \"longitude\": -63.616672,\n \"name\": \"Argentina\"\n },\n {\n \"country\": \"AS\",\n \"latitude\": -14.270972,\n \"longitude\": -170.132217,\n \"name\": \"American Samoa\"\n },\n {\n \"country\": \"AT\",\n \"latitude\": 47.516231,\n \"longitude\": 14.550072,\n \"name\": \"Austria\"\n },\n {\n \"country\": \"AU\",\n \"latitude\": -25.274398,\n \"longitude\": 133.775136,\n \"name\": \"Australia\"\n },\n {\n \"country\": \"AW\",\n \"latitude\": 12.52111,\n \"longitude\": -69.968338,\n \"name\": \"Aruba\"\n },\n {\n \"country\": \"AZ\",\n \"latitude\": 40.143105,\n \"longitude\": 47.576927,\n \"name\": \"Azerbaijan\"\n },\n {\n \"country\": \"BA\",\n \"latitude\": 43.915886,\n \"longitude\": 17.679076,\n \"name\": \"Bosnia and Herzegovina\"\n },\n {\n \"country\": \"BB\",\n \"latitude\": 13.193887,\n \"longitude\": -59.543198,\n \"name\": \"Barbados\"\n },\n {\n \"country\": \"BD\",\n \"latitude\": 23.684994,\n \"longitude\": 90.356331,\n \"name\": \"Bangladesh\"\n },\n {\n \"country\": \"BE\",\n \"latitude\": 50.503887,\n \"longitude\": 4.469936,\n \"name\": \"Belgium\"\n },\n {\n \"country\": \"BF\",\n \"latitude\": 12.238333,\n \"longitude\": -1.561593,\n \"name\": \"Burkina Faso\"\n },\n {\n \"country\": \"BG\",\n \"latitude\": 42.733883,\n \"longitude\": 25.48583,\n \"name\": \"Bulgaria\"\n },\n {\n \"country\": \"BH\",\n \"latitude\": 25.930414,\n \"longitude\": 50.637772,\n \"name\": \"Bahrain\"\n },\n {\n \"country\": \"BI\",\n \"latitude\": -3.373056,\n \"longitude\": 29.918886,\n \"name\": \"Burundi\"\n },\n {\n \"country\": \"BJ\",\n \"latitude\": 9.30769,\n \"longitude\": 2.315834,\n \"name\": \"Benin\"\n },\n {\n \"country\": \"BM\",\n \"latitude\": 32.321384,\n \"longitude\": -64.75737,\n \"name\": \"Bermuda\"\n },\n {\n \"country\": \"BN\",\n \"latitude\": 4.535277,\n \"longitude\": 114.727669,\n \"name\": \"Brunei\"\n },\n {\n \"country\": \"BO\",\n \"latitude\": -16.290154,\n \"longitude\": -63.588653,\n \"name\": \"Bolivia\"\n },\n {\n \"country\": \"BR\",\n \"latitude\": -14.235004,\n \"longitude\": -51.92528,\n \"name\": \"Brazil\"\n },\n {\n \"country\": \"BS\",\n \"latitude\": 25.03428,\n \"longitude\": -77.39628,\n \"name\": \"Bahamas\"\n },\n {\n \"country\": \"BT\",\n \"latitude\": 27.514162,\n \"longitude\": 90.433601,\n \"name\": \"Bhutan\"\n },\n {\n \"country\": \"BV\",\n \"latitude\": -54.423199,\n \"longitude\": 3.413194,\n \"name\": \"Bouvet Island\"\n },\n {\n \"country\": \"BW\",\n \"latitude\": -22.328474,\n \"longitude\": 24.684866,\n \"name\": \"Botswana\"\n },\n {\n \"country\": \"BY\",\n \"latitude\": 53.709807,\n \"longitude\": 27.953389,\n \"name\": \"Belarus\"\n },\n {\n \"country\": \"BZ\",\n \"latitude\": 17.189877,\n \"longitude\": -88.49765,\n \"name\": \"Belize\"\n },\n {\n \"country\": \"CA\",\n \"latitude\": 56.130366,\n \"longitude\": -106.346771,\n \"name\": \"Canada\"\n },\n {\n \"country\": \"CC\",\n \"latitude\": -12.164165,\n \"longitude\": 96.870956,\n \"name\": \"Cocos [Keeling] Islands\"\n },\n {\n \"country\": \"CD\",\n \"latitude\": -4.038333,\n \"longitude\": 21.758664,\n \"name\": \"Congo\"\n },\n {\n \"country\": \"CD\",\n \"latitude\": -4.038333,\n \"longitude\": 21.758664,\n \"name\": \"Congo (Democratic Republic of the)\"\n },\n {\n \"country\": \"CD\",\n \"latitude\": -4.038333,\n \"longitude\": 21.758664,\n \"name\": \"Congo [DRC]\"\n },\n {\n \"country\": \"CF\",\n \"latitude\": 6.611111,\n \"longitude\": 20.939444,\n \"name\": \"Central African Republic\"\n },\n {\n \"country\": \"CG\",\n \"latitude\": -0.228021,\n \"longitude\": 15.827659,\n \"name\": \"Congo [Republic]\"\n },\n {\n \"country\": \"CH\",\n \"latitude\": 46.818188,\n \"longitude\": 8.227512,\n \"name\": \"Switzerland\"\n },\n {\n \"country\": \"CI\",\n \"latitude\": 7.539989,\n \"longitude\": -5.54708,\n \"name\": \"Côte d'Ivoire\"\n },\n {\n \"country\": \"CK\",\n \"latitude\": -21.236736,\n \"longitude\": -159.777671,\n \"name\": \"Cook Islands\"\n },\n {\n \"country\": \"CL\",\n \"latitude\": -35.675147,\n \"longitude\": -71.542969,\n \"name\": \"Chile\"\n },\n {\n \"country\": \"CM\",\n \"latitude\": 7.369722,\n \"longitude\": 12.354722,\n \"name\": \"Cameroon\"\n },\n {\n \"country\": \"CN\",\n \"latitude\": 35.86166,\n \"longitude\": 104.195397,\n \"name\": \"China\"\n },\n {\n \"country\": \"CO\",\n \"latitude\": 4.570868,\n \"longitude\": -74.297333,\n \"name\": \"Colombia\"\n },\n {\n \"country\": \"CR\",\n \"latitude\": 9.748917,\n \"longitude\": -83.753428,\n \"name\": \"Costa Rica\"\n },\n {\n \"country\": \"CU\",\n \"latitude\": 21.521757,\n \"longitude\": -77.781167,\n \"name\": \"Cuba\"\n },\n {\n \"country\": \"CV\",\n \"latitude\": 16.002082,\n \"longitude\": -24.013197,\n \"name\": \"Cape Verde\"\n },\n {\n \"country\": \"CX\",\n \"latitude\": -10.447525,\n \"longitude\": 105.690449,\n \"name\": \"Christmas Island\"\n },\n {\n \"country\": \"CY\",\n \"latitude\": 35.126413,\n \"longitude\": 33.429859,\n \"name\": \"Cyprus\"\n },\n {\n \"country\": \"CZ\",\n \"latitude\": 49.817492,\n \"longitude\": 15.472962,\n \"name\": \"Czech Republic\"\n },\n {\n \"country\": \"DE\",\n \"latitude\": 51.165691,\n \"longitude\": 10.451526,\n \"name\": \"Germany\"\n },\n {\n \"country\": \"DJ\",\n \"latitude\": 11.825138,\n \"longitude\": 42.590275,\n \"name\": \"Djibouti\"\n },\n {\n \"country\": \"DK\",\n \"latitude\": 56.26392,\n \"longitude\": 9.501785,\n \"name\": \"Denmark\"\n },\n {\n \"country\": \"DM\",\n \"latitude\": 15.414999,\n \"longitude\": -61.370976,\n \"name\": \"Dominica\"\n },\n {\n \"country\": \"DO\",\n \"latitude\": 18.735693,\n \"longitude\": -70.162651,\n \"name\": \"Dominican Republic\"\n },\n {\n \"country\": \"DZ\",\n \"latitude\": 28.033886,\n \"longitude\": 1.659626,\n \"name\": \"Algeria\"\n },\n {\n \"country\": \"EC\",\n \"latitude\": -1.831239,\n \"longitude\": -78.183406,\n \"name\": \"Ecuador\"\n },\n {\n \"country\": \"EE\",\n \"latitude\": 58.595272,\n \"longitude\": 25.013607,\n \"name\": \"Estonia\"\n },\n {\n \"country\": \"EG\",\n \"latitude\": 26.820553,\n \"longitude\": 30.802498,\n \"name\": \"Egypt\"\n },\n {\n \"country\": \"EH\",\n \"latitude\": 24.215527,\n \"longitude\": -12.885834,\n \"name\": \"Western Sahara\"\n },\n {\n \"country\": \"ER\",\n \"latitude\": 15.179384,\n \"longitude\": 39.782334,\n \"name\": \"Eritrea\"\n },\n {\n \"country\": \"ES\",\n \"latitude\": 40.463667,\n \"longitude\": -3.74922,\n \"name\": \"Spain\"\n },\n {\n \"country\": \"ET\",\n \"latitude\": 9.145,\n \"longitude\": 40.489673,\n \"name\": \"Ethiopia\"\n },\n {\n \"country\": \"FI\",\n \"latitude\": 61.92411,\n \"longitude\": 25.748151,\n \"name\": \"Finland\"\n },\n {\n \"country\": \"FJ\",\n \"latitude\": -16.578193,\n \"longitude\": 179.414413,\n \"name\": \"Fiji\"\n },\n {\n \"country\": \"FK\",\n \"latitude\": -51.796253,\n \"longitude\": -59.523613,\n \"name\": \"Falkland Islands [Islas Malvinas]\"\n },\n {\n \"country\": \"FM\",\n \"latitude\": 7.425554,\n \"longitude\": 150.550812,\n \"name\": \"Micronesia\"\n },\n {\n \"country\": \"FO\",\n \"latitude\": 61.892635,\n \"longitude\": -6.911806,\n \"name\": \"Faroe Islands\"\n },\n {\n \"country\": \"FR\",\n \"latitude\": 46.227638,\n \"longitude\": 2.213749,\n \"name\": \"France\"\n },\n {\n \"country\": \"GA\",\n \"latitude\": -0.803689,\n \"longitude\": 11.609444,\n \"name\": \"Gabon\"\n },\n {\n \"country\": \"GB\",\n \"latitude\": 55.378051,\n \"longitude\": -3.435973,\n \"name\": \"United Kingdom\"\n },\n {\n \"country\": \"GD\",\n \"latitude\": 12.262776,\n \"longitude\": -61.604171,\n \"name\": \"Grenada\"\n },\n {\n \"country\": \"GE\",\n \"latitude\": 42.315407,\n \"longitude\": 43.356892,\n \"name\": \"Georgia\"\n },\n {\n \"country\": \"GF\",\n \"latitude\": 3.933889,\n \"longitude\": -53.125782,\n \"name\": \"French Guiana\"\n },\n {\n \"country\": \"GG\",\n \"latitude\": 49.465691,\n \"longitude\": -2.585278,\n \"name\": \"Guernsey\"\n },\n {\n \"country\": \"GH\",\n \"latitude\": 7.946527,\n \"longitude\": -1.023194,\n \"name\": \"Ghana\"\n },\n {\n \"country\": \"GI\",\n \"latitude\": 36.137741,\n \"longitude\": -5.345374,\n \"name\": \"Gibraltar\"\n },\n {\n \"country\": \"GL\",\n \"latitude\": 71.706936,\n \"longitude\": -42.604303,\n \"name\": \"Greenland\"\n },\n {\n \"country\": \"GM\",\n \"latitude\": 13.443182,\n \"longitude\": -15.310139,\n \"name\": \"Gambia\"\n },\n {\n \"country\": \"GN\",\n \"latitude\": 9.945587,\n \"longitude\": -9.696645,\n \"name\": \"Guinea\"\n },\n {\n \"country\": \"GP\",\n \"latitude\": 16.995971,\n \"longitude\": -62.067641,\n \"name\": \"Guadeloupe\"\n },\n {\n \"country\": \"GQ\",\n \"latitude\": 1.650801,\n \"longitude\": 10.267895,\n \"name\": \"Equatorial Guinea\"\n },\n {\n \"country\": \"GR\",\n \"latitude\": 39.074208,\n \"longitude\": 21.824312,\n \"name\": \"Greece\"\n },\n {\n \"country\": \"GS\",\n \"latitude\": -54.429579,\n \"longitude\": -36.587909,\n \"name\": \"South Georgia and the South Sandwich Islands\"\n },\n {\n \"country\": \"GT\",\n \"latitude\": 15.783471,\n \"longitude\": -90.230759,\n \"name\": \"Guatemala\"\n },\n {\n \"country\": \"GU\",\n \"latitude\": 13.444304,\n \"longitude\": 144.793731,\n \"name\": \"Guam\"\n },\n {\n \"country\": \"GW\",\n \"latitude\": 11.803749,\n \"longitude\": -15.180413,\n \"name\": \"Guinea-Bissau\"\n },\n {\n \"country\": \"GY\",\n \"latitude\": 4.860416,\n \"longitude\": -58.93018,\n \"name\": \"Guyana\"\n },\n {\n \"country\": \"GZ\",\n \"latitude\": 31.354676,\n \"longitude\": 34.308825,\n \"name\": \"Gaza Strip\"\n },\n {\n \"country\": \"HK\",\n \"latitude\": 22.396428,\n \"longitude\": 114.109497,\n \"name\": \"Hong Kong\"\n },\n {\n \"country\": \"HM\",\n \"latitude\": -53.08181,\n \"longitude\": 73.504158,\n \"name\": \"Heard Island and McDonald Islands\"\n },\n {\n \"country\": \"HN\",\n \"latitude\": 15.199999,\n \"longitude\": -86.241905,\n \"name\": \"Honduras\"\n },\n {\n \"country\": \"HR\",\n \"latitude\": 45.1,\n \"longitude\": 15.2,\n \"name\": \"Croatia\"\n },\n {\n \"country\": \"HT\",\n \"latitude\": 18.971187,\n \"longitude\": -72.285215,\n \"name\": \"Haiti\"\n },\n {\n \"country\": \"HU\",\n \"latitude\": 47.162494,\n \"longitude\": 19.503304,\n \"name\": \"Hungary\"\n },\n {\n \"country\": \"ID\",\n \"latitude\": -0.789275,\n \"longitude\": 113.921327,\n \"name\": \"Indonesia\"\n },\n {\n \"country\": \"IE\",\n \"latitude\": 53.41291,\n \"longitude\": -8.24389,\n \"name\": \"Ireland\"\n },\n {\n \"country\": \"IL\",\n \"latitude\": 31.046051,\n \"longitude\": 34.851612,\n \"name\": \"Israel\"\n },\n {\n \"country\": \"IM\",\n \"latitude\": 54.236107,\n \"longitude\": -4.548056,\n \"name\": \"Isle of Man\"\n },\n {\n \"country\": \"IN\",\n \"latitude\": 20.593684,\n \"longitude\": 78.96288,\n \"name\": \"India\"\n },\n {\n \"country\": \"IO\",\n \"latitude\": -6.343194,\n \"longitude\": 71.876519,\n \"name\": \"British Indian Ocean Territory\"\n },\n {\n \"country\": \"IQ\",\n \"latitude\": 33.223191,\n \"longitude\": 43.679291,\n \"name\": \"Iraq\"\n },\n {\n \"country\": \"IR\",\n \"latitude\": 32.427908,\n \"longitude\": 53.688046,\n \"name\": \"Iran\"\n },\n {\n \"country\": \"IS\",\n \"latitude\": 64.963051,\n \"longitude\": -19.020835,\n \"name\": \"Iceland\"\n },\n {\n \"country\": \"IT\",\n \"latitude\": 41.87194,\n \"longitude\": 12.56738,\n \"name\": \"Italy\"\n },\n {\n \"country\": \"JE\",\n \"latitude\": 49.214439,\n \"longitude\": -2.13125,\n \"name\": \"Jersey\"\n },\n {\n \"country\": \"JM\",\n \"latitude\": 18.109581,\n \"longitude\": -77.297508,\n \"name\": \"Jamaica\"\n },\n {\n \"country\": \"JO\",\n \"latitude\": 30.585164,\n \"longitude\": 36.238414,\n \"name\": \"Jordan\"\n },\n {\n \"country\": \"JP\",\n \"latitude\": 36.204824,\n \"longitude\": 138.252924,\n \"name\": \"Japan\"\n },\n {\n \"country\": \"KE\",\n \"latitude\": -0.023559,\n \"longitude\": 37.906193,\n \"name\": \"Kenya\"\n },\n {\n \"country\": \"KG\",\n \"latitude\": 41.20438,\n \"longitude\": 74.766098,\n \"name\": \"Kyrgyzstan\"\n },\n {\n \"country\": \"KH\",\n \"latitude\": 12.565679,\n \"longitude\": 104.990963,\n \"name\": \"Cambodia\"\n },\n {\n \"country\": \"KI\",\n \"latitude\": -3.370417,\n \"longitude\": -168.734039,\n \"name\": \"Kiribati\"\n },\n {\n \"country\": \"KM\",\n \"latitude\": -11.875001,\n \"longitude\": 43.872219,\n \"name\": \"Comoros\"\n },\n {\n \"country\": \"KN\",\n \"latitude\": 17.357822,\n \"longitude\": -62.782998,\n \"name\": \"Saint Kitts and Nevis\"\n },\n {\n \"country\": \"KP\",\n \"latitude\": 40.339852,\n \"longitude\": 127.510093,\n \"name\": \"North Korea\"\n },\n {\n \"country\": \"KR\",\n \"latitude\": 35.907757,\n \"longitude\": 127.766922,\n \"name\": \"South Korea\"\n },\n {\n \"country\": \"KW\",\n \"latitude\": 29.31166,\n \"longitude\": 47.481766,\n \"name\": \"Kuwait\"\n },\n {\n \"country\": \"KY\",\n \"latitude\": 19.513469,\n \"longitude\": -80.566956,\n \"name\": \"Cayman Islands\"\n },\n {\n \"country\": \"KZ\",\n \"latitude\": 48.019573,\n \"longitude\": 66.923684,\n \"name\": \"Kazakhstan\"\n },\n {\n \"country\": \"LA\",\n \"latitude\": 19.85627,\n \"longitude\": 102.495496,\n \"name\": \"Laos\"\n },\n {\n \"country\": \"LB\",\n \"latitude\": 33.854721,\n \"longitude\": 35.862285,\n \"name\": \"Lebanon\"\n },\n {\n \"country\": \"LC\",\n \"latitude\": 13.909444,\n \"longitude\": -60.978893,\n \"name\": \"Saint Lucia\"\n },\n {\n \"country\": \"LI\",\n \"latitude\": 47.166,\n \"longitude\": 9.555373,\n \"name\": \"Liechtenstein\"\n },\n {\n \"country\": \"LK\",\n \"latitude\": 7.873054,\n \"longitude\": 80.771797,\n \"name\": \"Sri Lanka\"\n },\n {\n \"country\": \"LR\",\n \"latitude\": 6.428055,\n \"longitude\": -9.429499,\n \"name\": \"Liberia\"\n },\n {\n \"country\": \"LS\",\n \"latitude\": -29.609988,\n \"longitude\": 28.233608,\n \"name\": \"Lesotho\"\n },\n {\n \"country\": \"LT\",\n \"latitude\": 55.169438,\n \"longitude\": 23.881275,\n \"name\": \"Lithuania\"\n },\n {\n \"country\": \"LU\",\n \"latitude\": 49.815273,\n \"longitude\": 6.129583,\n \"name\": \"Luxembourg\"\n },\n {\n \"country\": \"LV\",\n \"latitude\": 56.879635,\n \"longitude\": 24.603189,\n \"name\": \"Latvia\"\n },\n {\n \"country\": \"LY\",\n \"latitude\": 26.3351,\n \"longitude\": 17.228331,\n \"name\": \"Libya\"\n },\n {\n \"country\": \"MA\",\n \"latitude\": 31.791702,\n \"longitude\": -7.09262,\n \"name\": \"Morocco\"\n },\n {\n \"country\": \"MC\",\n \"latitude\": 43.750298,\n \"longitude\": 7.412841,\n \"name\": \"Monaco\"\n },\n {\n \"country\": \"MD\",\n \"latitude\": 47.411631,\n \"longitude\": 28.369885,\n \"name\": \"Moldova\"\n },\n {\n \"country\": \"ME\",\n \"latitude\": 42.708678,\n \"longitude\": 19.37439,\n \"name\": \"Montenegro\"\n },\n {\n \"country\": \"MG\",\n \"latitude\": -18.766947,\n \"longitude\": 46.869107,\n \"name\": \"Madagascar\"\n },\n {\n \"country\": \"MH\",\n \"latitude\": 7.131474,\n \"longitude\": 171.184478,\n \"name\": \"Marshall Islands\"\n },\n {\n \"country\": \"MK\",\n \"latitude\": 41.608635,\n \"longitude\": 21.745275,\n \"name\": \"Macedonia [FYROM]\"\n },\n {\n \"country\": \"ML\",\n \"latitude\": 17.570692,\n \"longitude\": -3.996166,\n \"name\": \"Mali\"\n },\n {\n \"country\": \"MM\",\n \"latitude\": 21.913965,\n \"longitude\": 95.956223,\n \"name\": \"Myanmar [Burma]\"\n },\n {\n \"country\": \"MN\",\n \"latitude\": 46.862496,\n \"longitude\": 103.846656,\n \"name\": \"Mongolia\"\n },\n {\n \"country\": \"MO\",\n \"latitude\": 22.198745,\n \"longitude\": 113.543873,\n \"name\": \"Macau\"\n },\n {\n \"country\": \"MP\",\n \"latitude\": 17.33083,\n \"longitude\": 145.38469,\n \"name\": \"Northern Mariana Islands\"\n },\n {\n \"country\": \"MQ\",\n \"latitude\": 14.641528,\n \"longitude\": -61.024174,\n \"name\": \"Martinique\"\n },\n {\n \"country\": \"MR\",\n \"latitude\": 21.00789,\n \"longitude\": -10.940835,\n \"name\": \"Mauritania\"\n },\n {\n \"country\": \"MS\",\n \"latitude\": 16.742498,\n \"longitude\": -62.187366,\n \"name\": \"Montserrat\"\n },\n {\n \"country\": \"MT\",\n \"latitude\": 35.937496,\n \"longitude\": 14.375416,\n \"name\": \"Malta\"\n },\n {\n \"country\": \"MU\",\n \"latitude\": -20.348404,\n \"longitude\": 57.552152,\n \"name\": \"Mauritius\"\n },\n {\n \"country\": \"MV\",\n \"latitude\": 3.202778,\n \"longitude\": 73.22068,\n \"name\": \"Maldives\"\n },\n {\n \"country\": \"MW\",\n \"latitude\": -13.254308,\n \"longitude\": 34.301525,\n \"name\": \"Malawi\"\n },\n {\n \"country\": \"MX\",\n \"latitude\": 23.634501,\n \"longitude\": -102.552784,\n \"name\": \"Mexico\"\n },\n {\n \"country\": \"MY\",\n \"latitude\": 4.210484,\n \"longitude\": 101.975766,\n \"name\": \"Malaysia\"\n },\n {\n \"country\": \"MZ\",\n \"latitude\": -18.665695,\n \"longitude\": 35.529562,\n \"name\": \"Mozambique\"\n },\n {\n \"country\": \"NA\",\n \"latitude\": -22.95764,\n \"longitude\": 18.49041,\n \"name\": \"Namibia\"\n },\n {\n \"country\": \"NC\",\n \"latitude\": -20.904305,\n \"longitude\": 165.618042,\n \"name\": \"New Caledonia\"\n },\n {\n \"country\": \"NE\",\n \"latitude\": 17.607789,\n \"longitude\": 8.081666,\n \"name\": \"Niger\"\n },\n {\n \"country\": \"NF\",\n \"latitude\": -29.040835,\n \"longitude\": 167.954712,\n \"name\": \"Norfolk Island\"\n },\n {\n \"country\": \"NG\",\n \"latitude\": 9.081999,\n \"longitude\": 8.675277,\n \"name\": \"Nigeria\"\n },\n {\n \"country\": \"NI\",\n \"latitude\": 12.865416,\n \"longitude\": -85.207229,\n \"name\": \"Nicaragua\"\n },\n {\n \"country\": \"NL\",\n \"latitude\": 52.132633,\n \"longitude\": 5.291266,\n \"name\": \"Netherlands\"\n },\n {\n \"country\": \"NO\",\n \"latitude\": 60.472024,\n \"longitude\": 8.468946,\n \"name\": \"Norway\"\n },\n {\n \"country\": \"NP\",\n \"latitude\": 28.394857,\n \"longitude\": 84.124008,\n \"name\": \"Nepal\"\n },\n {\n \"country\": \"NR\",\n \"latitude\": -0.522778,\n \"longitude\": 166.931503,\n \"name\": \"Nauru\"\n },\n {\n \"country\": \"NU\",\n \"latitude\": -19.054445,\n \"longitude\": -169.867233,\n \"name\": \"Niue\"\n },\n {\n \"country\": \"NZ\",\n \"latitude\": -40.900557,\n \"longitude\": 174.885971,\n \"name\": \"New Zealand\"\n },\n {\n \"country\": \"OM\",\n \"latitude\": 21.512583,\n \"longitude\": 55.923255,\n \"name\": \"Oman\"\n },\n {\n \"country\": \"PA\",\n \"latitude\": 8.537981,\n \"longitude\": -80.782127,\n \"name\": \"Panama\"\n },\n {\n \"country\": \"PE\",\n \"latitude\": -9.189967,\n \"longitude\": -75.015152,\n \"name\": \"Peru\"\n },\n {\n \"country\": \"PF\",\n \"latitude\": -17.679742,\n \"longitude\": -149.406843,\n \"name\": \"French Polynesia\"\n },\n {\n \"country\": \"PG\",\n \"latitude\": -6.314993,\n \"longitude\": 143.95555,\n \"name\": \"Papua New Guinea\"\n },\n {\n \"country\": \"PH\",\n \"latitude\": 12.879721,\n \"longitude\": 121.774017,\n \"name\": \"Philippines\"\n },\n {\n \"country\": \"PK\",\n \"latitude\": 30.375321,\n \"longitude\": 69.345116,\n \"name\": \"Pakistan\"\n },\n {\n \"country\": \"PL\",\n \"latitude\": 51.919438,\n \"longitude\": 19.145136,\n \"name\": \"Poland\"\n },\n {\n \"country\": \"PM\",\n \"latitude\": 46.941936,\n \"longitude\": -56.27111,\n \"name\": \"Saint Pierre and Miquelon\"\n },\n {\n \"country\": \"PN\",\n \"latitude\": -24.703615,\n \"longitude\": -127.439308,\n \"name\": \"Pitcairn Islands\"\n },\n {\n \"country\": \"PR\",\n \"latitude\": 18.220833,\n \"longitude\": -66.590149,\n \"name\": \"Puerto Rico\"\n },\n {\n \"country\": \"PS\",\n \"latitude\": 31.952162,\n \"longitude\": 35.233154,\n \"name\": \"Palestinian Territories\"\n },\n {\n \"country\": \"PT\",\n \"latitude\": 39.399872,\n \"longitude\": -8.224454,\n \"name\": \"Portugal\"\n },\n {\n \"country\": \"PW\",\n \"latitude\": 7.51498,\n \"longitude\": 134.58252,\n \"name\": \"Palau\"\n },\n {\n \"country\": \"PY\",\n \"latitude\": -23.442503,\n \"longitude\": -58.443832,\n \"name\": \"Paraguay\"\n },\n {\n \"country\": \"QA\",\n \"latitude\": 25.354826,\n \"longitude\": 51.183884,\n \"name\": \"Qatar\"\n },\n {\n \"country\": \"RE\",\n \"latitude\": -21.115141,\n \"longitude\": 55.536384,\n \"name\": \"Réunion\"\n },\n {\n \"country\": \"RO\",\n \"latitude\": 45.943161,\n \"longitude\": 24.96676,\n \"name\": \"Romania\"\n },\n {\n \"country\": \"RS\",\n \"latitude\": 44.016521,\n \"longitude\": 21.005859,\n \"name\": \"Serbia\"\n },\n {\n \"country\": \"RU\",\n \"latitude\": 61.52401,\n \"longitude\": 105.318756,\n \"name\": \"Russia\"\n },\n {\n \"country\": \"RW\",\n \"latitude\": -1.940278,\n \"longitude\": 29.873888,\n \"name\": \"Rwanda\"\n },\n {\n \"country\": \"SA\",\n \"latitude\": 23.885942,\n \"longitude\": 45.079162,\n \"name\": \"Saudi Arabia\"\n },\n {\n \"country\": \"SB\",\n \"latitude\": -9.64571,\n \"longitude\": 160.156194,\n \"name\": \"Solomon Islands\"\n },\n {\n \"country\": \"SC\",\n \"latitude\": -4.679574,\n \"longitude\": 55.491977,\n \"name\": \"Seychelles\"\n },\n {\n \"country\": \"SD\",\n \"latitude\": 12.862807,\n \"longitude\": 30.217636,\n \"name\": \"Sudan\"\n },\n {\n \"country\": \"SE\",\n \"latitude\": 60.128161,\n \"longitude\": 18.643501,\n \"name\": \"Sweden\"\n },\n {\n \"country\": \"SG\",\n \"latitude\": 1.352083,\n \"longitude\": 103.819836,\n \"name\": \"Singapore\"\n },\n {\n \"country\": \"SH\",\n \"latitude\": -24.143474,\n \"longitude\": -10.030696,\n \"name\": \"Saint Helena\"\n },\n {\n \"country\": \"SI\",\n \"latitude\": 46.151241,\n \"longitude\": 14.995463,\n \"name\": \"Slovenia\"\n },\n {\n \"country\": \"SJ\",\n \"latitude\": 77.553604,\n \"longitude\": 23.670272,\n \"name\": \"Svalbard and Jan Mayen\"\n },\n {\n \"country\": \"SK\",\n \"latitude\": 48.669026,\n \"longitude\": 19.699024,\n \"name\": \"Slovakia\"\n },\n {\n \"country\": \"SL\",\n \"latitude\": 8.460555,\n \"longitude\": -11.779889,\n \"name\": \"Sierra Leone\"\n },\n {\n \"country\": \"SM\",\n \"latitude\": 43.94236,\n \"longitude\": 12.457777,\n \"name\": \"San Marino\"\n },\n {\n \"country\": \"SN\",\n \"latitude\": 14.497401,\n \"longitude\": -14.452362,\n \"name\": \"Senegal\"\n },\n {\n \"country\": \"SO\",\n \"latitude\": 5.152149,\n \"longitude\": 46.199616,\n \"name\": \"Somalia\"\n },\n {\n \"country\": \"SR\",\n \"latitude\": 3.919305,\n \"longitude\": -56.027783,\n \"name\": \"Suriname\"\n },\n {\n \"country\": \"ST\",\n \"latitude\": 0.18636,\n \"longitude\": 6.613081,\n \"name\": \"São Tomé and Príncipe\"\n },\n {\n \"country\": \"SV\",\n \"latitude\": 13.794185,\n \"longitude\": -88.89653,\n \"name\": \"El Salvador\"\n },\n {\n \"country\": \"SY\",\n \"latitude\": 34.802075,\n \"longitude\": 38.996815,\n \"name\": \"Syria\"\n },\n {\n \"country\": \"SZ\",\n \"latitude\": -26.522503,\n \"longitude\": 31.465866,\n \"name\": \"Swaziland\"\n },\n {\n \"country\": \"TC\",\n \"latitude\": 21.694025,\n \"longitude\": -71.797928,\n \"name\": \"Turks and Caicos Islands\"\n },\n {\n \"country\": \"TD\",\n \"latitude\": 15.454166,\n \"longitude\": 18.732207,\n \"name\": \"Chad\"\n },\n {\n \"country\": \"TF\",\n \"latitude\": -49.280366,\n \"longitude\": 69.348557,\n \"name\": \"French Southern Territories\"\n },\n {\n \"country\": \"TG\",\n \"latitude\": 8.619543,\n \"longitude\": 0.824782,\n \"name\": \"Togo\"\n },\n {\n \"country\": \"TH\",\n \"latitude\": 15.870032,\n \"longitude\": 100.992541,\n \"name\": \"Thailand\"\n },\n {\n \"country\": \"TJ\",\n \"latitude\": 38.861034,\n \"longitude\": 71.276093,\n \"name\": \"Tajikistan\"\n },\n {\n \"country\": \"TK\",\n \"latitude\": -8.967363,\n \"longitude\": -171.855881,\n \"name\": \"Tokelau\"\n },\n {\n \"country\": \"TL\",\n \"latitude\": -8.874217,\n \"longitude\": 125.727539,\n \"name\": \"Timor-Leste\"\n },\n {\n \"country\": \"TM\",\n \"latitude\": 38.969719,\n \"longitude\": 59.556278,\n \"name\": \"Turkmenistan\"\n },\n {\n \"country\": \"TN\",\n \"latitude\": 33.886917,\n \"longitude\": 9.537499,\n \"name\": \"Tunisia\"\n },\n {\n \"country\": \"TO\",\n \"latitude\": -21.178986,\n \"longitude\": -175.198242,\n \"name\": \"Tonga\"\n },\n {\n \"country\": \"TR\",\n \"latitude\": 38.963745,\n \"longitude\": 35.243322,\n \"name\": \"Turkey\"\n },\n {\n \"country\": \"TT\",\n \"latitude\": 10.691803,\n \"longitude\": -61.222503,\n \"name\": \"Trinidad and Tobago\"\n },\n {\n \"country\": \"TV\",\n \"latitude\": -7.109535,\n \"longitude\": 177.64933,\n \"name\": \"Tuvalu\"\n },\n {\n \"country\": \"TW\",\n \"latitude\": 23.69781,\n \"longitude\": 120.960515,\n \"name\": \"Taiwan\"\n },\n {\n \"country\": \"TZ\",\n \"latitude\": -6.369028,\n \"longitude\": 34.888822,\n \"name\": \"Tanzania\"\n },\n {\n \"country\": \"UA\",\n \"latitude\": 48.379433,\n \"longitude\": 31.16558,\n \"name\": \"Ukraine\"\n },\n {\n \"country\": \"UG\",\n \"latitude\": 1.373333,\n \"longitude\": 32.290275,\n \"name\": \"Uganda\"\n },\n {\n \"country\": \"US\",\n \"latitude\": 37.09024,\n \"longitude\": -95.712891,\n \"name\": \"United States\"\n },\n {\n \"country\": \"UY\",\n \"latitude\": -32.522779,\n \"longitude\": -55.765835,\n \"name\": \"Uruguay\"\n },\n {\n \"country\": \"UZ\",\n \"latitude\": 41.377491,\n \"longitude\": 64.585262,\n \"name\": \"Uzbekistan\"\n },\n {\n \"country\": \"VA\",\n \"latitude\": 41.902916,\n \"longitude\": 12.453389,\n \"name\": \"Vatican City\"\n },\n {\n \"country\": \"VC\",\n \"latitude\": 12.984305,\n \"longitude\": -61.287228,\n \"name\": \"Saint Vincent and the Grenadines\"\n },\n {\n \"country\": \"VE\",\n \"latitude\": 6.42375,\n \"longitude\": -66.58973,\n \"name\": \"Venezuela\"\n },\n {\n \"country\": \"VG\",\n \"latitude\": 18.420695,\n \"longitude\": -64.639968,\n \"name\": \"British Virgin Islands\"\n },\n {\n \"country\": \"VI\",\n \"latitude\": 18.335765,\n \"longitude\": -64.896335,\n \"name\": \"U.S. Virgin Islands\"\n },\n {\n \"country\": \"VN\",\n \"latitude\": 14.058324,\n \"longitude\": 108.277199,\n \"name\": \"Vietnam\"\n },\n {\n \"country\": \"VU\",\n \"latitude\": -15.376706,\n \"longitude\": 166.959158,\n \"name\": \"Vanuatu\"\n },\n {\n \"country\": \"WF\",\n \"latitude\": -13.768752,\n \"longitude\": -177.156097,\n \"name\": \"Wallis and Futuna\"\n },\n {\n \"country\": \"WS\",\n \"latitude\": -13.759029,\n \"longitude\": -172.104629,\n \"name\": \"Samoa\"\n },\n {\n \"country\": \"XK\",\n \"latitude\": 42.602636,\n \"longitude\": 20.902977,\n \"name\": \"Kosovo\"\n },\n {\n \"country\": \"YE\",\n \"latitude\": 15.552727,\n \"longitude\": 48.516388,\n \"name\": \"Yemen\"\n },\n {\n \"country\": \"YT\",\n \"latitude\": -12.8275,\n \"longitude\": 45.166244,\n \"name\": \"Mayotte\"\n },\n {\n \"country\": \"ZA\",\n \"latitude\": -30.559482,\n \"longitude\": 22.937506,\n \"name\": \"South Africa\"\n },\n {\n \"country\": \"ZM\",\n \"latitude\": -13.133897,\n \"longitude\": 27.849332,\n \"name\": \"Zambia\"\n },\n {\n \"country\": \"ZW\",\n \"latitude\": -19.015438,\n \"longitude\": 29.154857,\n \"name\": \"Zimbabwe\"\n }\n]\n\nexport const findCountryGPS = (countryName: string): {\n country: string;\n latitude: number;\n longitude: number;\n name: string;\n} | undefined => {\n let f = countryGPS.filter(c => c.name === countryName);\n if (f && f[0]) return f[0];\n return undefined;\n}\n\nexport const findRegionGPS = (regionName: string): IRegion | undefined => {\n let f = Regions.filter(r => r.code === regionName);\n if (f && f[0]) return f[0];\n return undefined;\n}\n"],"sourceRoot":""}