{"version":3,"sources":["../../apiservice/src/model/private/db.util.ts","interface/util.ts","../../apiservice/src/model/private/transformer.ts","interface/config.ts","interface/container.ts","../../apiservice/src/interface/container.ts","../../apiservice/src/model/SiteDto.map.ts","../../apiservice/src/model/SiteDto.ts","../../apiservice/src/model/MediumDto.map.ts","../../apiservice/src/model/MediumDto.ts","controllers/interface.ts","interface/state.ts","../../apiservice/src/interface/config.ts","../../apiservice/src/interface/util.ts","../../apiservice/src/private/db/private/db.ts","../../apiservice/src/private/api/private/form.ts","../../apiservice/src/private/api/auth.ts","../../apiservice/src/private/manager/auth.ts","../../apiservice/src/private/api/media.ts","../../apiservice/src/private/manager/media.ts","../../apiservice/src/private/operation/downloadmedia.ts","../../apiservice/src/private/api/mediaDiff.ts","../../apiservice/src/private/api/siteData.ts","../../apiservice/src/private/api/index.ts","../../apiservice/src/private/patch/apply.ts","../../apiservice/src/private/patch/storage.ts","../../apiservice/src/private/patch/index.ts","../../apiservice/src/private/db/private/sitePatchMap.ts","../../apiservice/src/private/db/update.ts","../../apiservice/src/private/operation/updatesite.ts","../../apiservice/src/private/manager/operation.ts","../../apiservice/src/util/array.ts","../../apiservice/src/util/promise.ts","../../apiservice/src/model/CountryDto.map.ts","../../apiservice/src/model/CountryDto.ts","../../apiservice/src/model/MenuItemDto.map.ts","../../apiservice/src/model/MenuItemDto.ts","../../apiservice/src/model/MenuItemTranslationDto.map.ts","../../apiservice/src/model/MenuItemTranslationDto.ts","../../apiservice/src/model/SiteObjectKeywordDto.map.ts","../../apiservice/src/model/SiteObjectKeywordDto.ts","../../apiservice/src/model/TourDto.map.ts","../../apiservice/src/model/TourTypeDto.map.ts","../../apiservice/src/model/TourTypeDto.ts","../../apiservice/src/model/TourSubTypeDto.map.ts","../../apiservice/src/model/TourSubTypeDto.ts","../../apiservice/src/model/TourStatusDto.map.ts","../../apiservice/src/model/TourStatusDto.ts","../../apiservice/src/model/TourSupportedLanguageDto.map.ts","../../apiservice/src/model/TourSupportedLanguageDto.ts","../../apiservice/src/model/TourTranslationDto.map.ts","../../apiservice/src/model/TourTranslationDto.ts","../../apiservice/src/model/TourDto.ts","../../apiservice/src/model/TourMenuItemDto.map.ts","../../apiservice/src/model/TourMenuItemDto.ts","../../apiservice/src/model/TourRelatedSiteObjectDto.map.ts","../../apiservice/src/model/TourRelatedSiteObjectDto.ts","../../apiservice/src/model/index.ts","../../apiservice/src/private/db/db.ts","../../apiservice/src/session/session.ts","../../apiservice/src/session/index.ts","../../apiservice/src/model/StyleDto.map.ts","../../apiservice/src/model/StyleDto.ts","components/common/Loading.tsx","interface/overrides.ts","../../apiservice/src/model/LanguageDto.map.ts","../../apiservice/src/model/LanguageDto.ts","../../apiservice/src/model/SiteObjectDto.map.ts","../../apiservice/src/model/SiteObjectDto.ts","../../apiservice/src/model/SiteSupportedLanguageDto.map.ts","../../apiservice/src/model/SiteSupportedLanguageDto.ts","interface/serviceworker.ts","../../apiservice/src/model/SiteObjectTranslationDto.map.ts","../../apiservice/src/model/SiteObjectTranslationDto.ts","components/siteobject/placeholderData.ts","controllers/siteobject/render.tsx","controllers/siteobject/canLoad.ts","controllers/siteobject/index.tsx","../../apiservice/src/model/FontSizeUnitDto.map.ts","../../apiservice/src/model/FontSizeUnitDto.ts","../../apiservice/src/model/FontFamilyDto.map.ts","../../apiservice/src/model/FontFamilyDto.ts","../../apiservice/src/model/FontStyleDto.map.ts","../../apiservice/src/model/FontStyleDto.ts","../../apiservice/src/model/FontAlignmentDto.map.ts","../../apiservice/src/model/FontAlignmentDto.ts","../../apiservice/src/model/FloorPlanDto.map.ts","../../apiservice/src/model/FloorPlanDto.ts","../../apiservice/src/model/BackgroundModeDto.map.ts","../../apiservice/src/model/BackgroundModeDto.ts","../../apiservice/src/model/BeaconDto.map.ts","../../apiservice/src/model/BeaconDto.ts","../../apiservice/src/model/SiteObjectTypeDto.map.ts","../../apiservice/src/model/SiteObjectTypeDto.ts","../../apiservice/src/model/BeaconSensitivityDto.map.ts","../../apiservice/src/model/BeaconSensitivityDto.ts","../../apiservice/src/model/ScreenOrientationDto.map.ts","../../apiservice/src/model/ScreenOrientationDto.ts","../../apiservice/src/model/SiteObjectOnFloorPlanDto.map.ts","../../apiservice/src/model/SiteObjectOnFloorPlanDto.ts","../../apiservice/src/model/PinTypeDto.map.ts","../../apiservice/src/model/PinTypeDto.ts","controllers/tour/interface.ts","../../apiservice/src/util/languages.ts","../../apiservice/src/util/tours.ts","../../apiservice/src/util/index.ts","config/api.ts","config/asset.ts","config/cache.ts","config/routes.ts","controllers/downloadrequest/util.ts","controllers/languageselect/interface.ts","controllers/tourselect/interface.ts","components/siteobject/interface.ts","../../apiservice/src/private/manager/userState.ts","components/common/Loading.module.css","controllers/launch/defaultProps.ts","controllers/launch/state/events.ts","controllers/launch/mapping.ts","controllers/launch/render.tsx","controllers/launch/index.tsx","components/tour/placeholderData.ts","controllers/tour/render.tsx","controllers/tour/canLoad.ts","controllers/tour/canRender.ts","controllers/tour/index.tsx","components/languageselect/placeholderData.ts","controllers/languageselect/render.tsx","controllers/languageselect/canRender.ts","controllers/languageselect/index.tsx","components/tourselect/placeholderData.ts","controllers/tourselect/render.tsx","controllers/tourselect/canRender.ts","controllers/tourselect/index.tsx","controllers/floorplan/placeholderData.ts","controllers/floorplan/render.tsx","controllers/floorplan/index.tsx","config/log.ts","config/bind.ts","util/cache.ts","util/cachecontroller.ts","util/env.ts","util/log.if.ts","util/log.console.ts","util/log.ai.ts","util/log.ts","util/querystring.ts","util/bind.ts","interface/route.ts","routes/launch/arguments.tsx","components/common/useUserSession.tsx","routes/launch/component.tsx","routes/launch/coordinator.ts","routes/launch/index.tsx","routes/languageselect/arguments.tsx","routes/languageselect/component.tsx","routes/languageselect/coordinator.ts","routes/languageselect/index.ts","routes/tourselect/arguments.ts","routes/tourselect/component.tsx","routes/tourselect/coordinator.ts","routes/tourselect/index.ts","routes/tour/arguments.ts","routes/tour/component.tsx","routes/tour/coordinator.ts","routes/tour/index.ts","routes/siteobject/arguments.ts","routes/siteobject/component.tsx","routes/siteobject/coordinator.ts","routes/siteobject/index.ts","routes/floorplan/arguments.tsx","routes/floorplan/component.tsx","routes/floorplan/coordinator.ts","routes/floorplan/index.ts","LocationHistory.ts","routes/router.ts","routes/bind.ts","state/userState.ts","state/bind.ts","worker/bind.ts","ioc.tsx","index.tsx"],"names":["TABLES","loadAll","db","tableName","ctor","Promise","resolve","reject","a","all","mapped","map","x","load","id","get","then","catch","error","loadBackgroundModeId","loadBeaconId","loadBeaconSensitivityId","loadFloorplanId","loadFontFamilyId","loadFontStyleId","loadFontSizeUnitId","loadFontAlignmentId","loadLanguageId","loadMediumId","guid","loadMenuItemId","loadPinTypeId","loadScreenOrientationId","loadSiteId","loadSiteObjectId","loadSiteObjectOnFloorplanId","loadSiteObjectKeywordId","loadSiteObjectTranslationId","loadSiteObjectTypeId","loadSiteSupportedLanguageId","loadStyleId","loadTourId","loadTourStatusId","loadTourSubTypeId","loadTourTranslations","loadTourTypeId","loadTourSupportedLanguage","allBackgroundModes","allBeacons","allBeaconSensitivitys","allFloorplans","allFontFamilys","allFontStyles","allFontSizeUnits","allFontAlignments","allLanguages","allMediums","allMenuItems","allPinTypes","allScreenOrientations","allSites","allSiteObjects","allSiteObjectOnFloorplan","allSiteObjectKeywords","allSiteObjectTranslations","allSiteObjectTypes","allSiteSupportedLanguages","allStyles","allTours","allTourStatuss","allTourSubTypes","allTourTranslations","allTourTypes","allTourSupportedLanguages","IBrowserPlatform","TYPES","IEnv","Symbol","for","IFetch","ILog","IQueryURL","IZip","IKVStorage","IBrowser","ICache","ICacheController","ITranslationStorage","injectENV","container","injectContainer","bindENV","val","bind","injectFetch","bindFetch","injectLog","bindLog","injectQueryURL","bindQueryURL","injectZip","bindZip","injectKVStorage","bindKVStorage","injectBrowser","bindBrowser","bindCache","injectCacheController","bindCacheController","injectTranslationStorage","bindTranslationStorage","_addMappingsToObject","mappings","sourceObject","destObject","property","newValue","localName","externalName","removeValueOnImport","customImport","hasOwnProperty","defaultValue","create","newEntity","apply","flatten","entity","flattenObject","value","keySave","keyGet","removeValueOnExport","customExport","IConfigLogLevel","IConfigLogDestination","IConfigCacheName","IConfigRoutePath","IConfigLog","IConfigAPI","IConfigAssets","IConfigCache","IConfigRoute","injectConfigLog","bindConfigLog","injectConfigAPI","bindConfigAPI","injectConfigAssets","bindConfigAssets","injectConfigCache","bindConfigCache","injectConfigRoute","bindConfigRoute","global","bindContainer","MAPPINGS","_imageLogo","DBUtil","this","logoMediumId","MediumDto","_screenOrientation","screenOrientationId","ScreenOrientationDto","_languageSelectionStyle","languageSelectionStyleId","StyleDto","_tourSelectionStyle","tourSelectionStyleId","_siteSupportedLanguages","self","SiteSupportedLanguageDto","ssl","sslMatch","filter","siteId","data","obj","Transformers","imageLogo","screenOrientation","languageSelectionStyle","tourSelectionStyle","siteSupportedLanguages","_site","SiteDto","_languages","SiteObjectTranslationDto","allSOTs","matchSOTs","sot","mediumId","languageIds","languageId","LanguageDto","languages","site","DataCheckResult","IStateUserManager","injectUserSession","bindUserSession","DexieDB","options","IDBKeyRange","indexedDB","name","version","stores","Dexie","serialize","pairings","Object","keys","key","push","encodeURIComponent","join","_request","apiUrl","apiExtension","clientId","clientSecret","grantType","username","password","authParams","url","method","body","form","headers","authenticate","fetcher","timeout","req","response","statusCode","isStatusOk","payload","access_token","err","console","JSON","stringify","manager","authArguments","args","undefined","parse","expirySetDate","Date","setSeconds","getSeconds","pendingRenew","accessToken","expiry","status","length","hasExpired","threshold","getTime","renew","auth","authResponse","expires_in","substring","requestURL","config","mediaId","extension","media","replace","request","authToken","expectedResponseType","_getMedia","type","PPromise","progress","promise","onProgress","blob","Blob","getMedia","getMediaNoResponse","exports","_cache","window","caches","cacheName","WorkspaceMedia","open","cache","_cachedResult","configAPI","configCache","expectedUrl","Request","match","ignoreMethod","ignoreSearch","_downloadLink","getMediaURL","_downloadToBlob","cacheOnly","database","medium","token","mediaBlob","mimeType","close","_downloadToBlobs","mediaIds","promises","results","_isAllCached","_","MediaManager","downloadLink","downloadLinks","_downloadLinks","downloadToURL","URL","createObjectURL","_downloadToUrl","downloadToURLs","ids","blobs","urls","_downloadToUrls","downloadToBlob","downloadToBlobs","isMediumCached","isAllMediaCached","mediaForLanguage","language","shouldOpenClose","isOpen","siteObjectTranslation","allMediaWithTranslations","matchMediaTranslations","allMedia","allMediaWithTranslationsIds","m","mediaUniversal","includes","downloadMedia","forEach","downloadList","values","_mediaUsedForLanguage","downloadAll","fetchError","totalBytesToDownload","reduce","total","mediumSize","progressUptoThisFetch","idx","progressWeighting","fetch","progressNow","progressCb","Math","max","min","siteHash","existingMedia","mapMediumToBodyRequest","mediumHash","requestDto","hash","requests","getMediaDiff","mediaDiff","_downloadSiteData","_unzipSiteData","zip","unzipFile","dataStr","jsonData","getSiteData","sitedata","siteData","patchData","source","jsonpatch","result","applyPatch","newDocument","TABLE_NAME","TABLE_MAPPINGS","_db","table","save","put","remove","delete","storage","ENTITY_MAPPING","tableNameFromInterfaceName","interfaceName","interfaceNameFromEntityName","entityName","entityNameFromInterfaceName","entityNameFromPatchPath","path","pathCompare","toLowerCase","entityname","patchPathFromEntityName","mapArray","Array","isArray","tableNameFromEntityName","entityNameFromTableName","_promise","patchPath","items","sitePatchMap","getTable","bulkAddOrUpdate","update","PProgress","patchPaths","progressPerPath","i","zipper","existingPatch","patch","siteFetcher","api","siteResponse","newPatch","currentHash","_opDownloadMedia","Operation","updateSite","_opUpdateSite","downloadAllMediaAllLanguages","_opGetAllMedia","progressPC","downloadAllMediaInLanguage","arr","promiser","arrayOrig","newArray","filterAsync","origPromise","invertResult","uncachedMedia","_image","imageMediumId","image","_language","_menuItem","menuItemId","MenuItemDto","menuItem","_siteSupportedLanguage","DBUtils","siteSupportedLanguageId","_tour","tourId","TourDto","siteSupportedLanguage","tour","_tourSupportedLanguage","tourSupportedLanguageId","TourSupportedLanguageDto","tourSupportedLanguage","_tourType","tourTypeId","TourTypeDto","_tourSubType","tourSubTypeId","TourSubTypeDto","_style","styleId","_tourStatus","tourStatusId","TourStatusDto","_tourSupportedLanguages","_translations","tourSupportedLanguages","matchTSL","matchTSLIds","TourTranslationDto","allTranslations","matchTranslations","_translation","Number","allSSL","matchSSL","matchSSLIds","allTSL","translations","tourType","tourSubType","style","tourStatus","translation","_siteObject","siteObjectId","SiteObjectDto","siteObject","models","BackgroundModeDto","BeaconDto","BeaconSensitivityDto","CountryDto","FloorPlanDto","FontAlignmentDto","FontSizeUnitDto","FontStyleDto","FontFamilyDto","MenuItemTranslationDto","PinTypeDto","SiteObjectKeywordDto","SiteObjectOnFloorPlanDto","SiteObjectTypeDto","TourMenuItemDto","TourRelatedSiteObjectDto","_generateDBMappings","dbMapping","model","item","_instantiator","entityData","ContainerTable","_table","_entityName","count","toArray","pk","bulkPut","allKeys","ContainerDB","_openCount","backgroundMode","beacons","beaconSensitivity","country","floorPlan","fontAlignment","fontFamily","fontSizeUnit","fontStyle","menuItemTranslation","pinType","siteObjectKeyword","siteObjectOnFloorPlan","siteObjectType","tourMenuItem","tourRelatedSiteObject","tourTranslation","DB","TABLE_OPTIONS","_toPrivate","session","_authManager","authManager","_workspaceDB","_toSession","mediaManager","operation","operationManager","state","userState","_save","_remove","_load","loadData","saveObject","_parent","parentId","_foregroundImageMedium","foregroundImageMediumId","_backgroundImageMedium","backgroundImageMediumId","_menuImageMedium","menuImageMediumId","_backgroundMode","backgroundModeId","BackgroundMode","_primaryFontFamily","primaryFontFamilyId","_primaryFontStyle","primaryFontStyleId","_primaryFontSizeUnit","primaryFontSizeUnitId","_primaryFontAlignment","primaryFontAlignmentId","_secondaryFontFamily","secondaryFontFamilyId","_secondaryFontStyle","secondaryFontStyleId","_secondaryFontSizeUnit","secondaryFontSizeUnitId","_secondaryFontAlignment","secondaryFontAlignmentId","_tertiaryFontFamily","tertiaryFontFamilyId","_tertiaryFontStyle","tertiaryFontStyleId","_tertiaryFontSizeUnit","tertiaryFontSizeUnitId","_tertiaryFontAlignment","tertiaryFontAlignmentId","parent","foregroundImageMedium","backgroundImageMedium","menuImageMedium","primaryFontFamily","primaryFontStyle","primaryFontSizeUnit","primaryFontAlignment","secondaryFontFamily","secondaryFontStyle","secondaryFontSizeUnit","secondaryFontAlignment","tertiaryFontFamily","tertiaryFontStyle","tertiaryFontSizeUnit","tertiaryFontAlignment","StyleElem","DEFAULTS","Container","Text","PROPS_APPLICATOR","props","styleOverrides","_LoadingText","index","text","View","elem","assign","styleForElement","className","element","toString","classLoad","styles","classNameForElement","useState","loadCounter","setLoadCounter","ref","createRef","useEffect","setTimeout","clearTimeout","getProjectOverrides","overrideMapper","getValueWithDefault","siteObjectKeywords","keywords","_type","siteObjectTypeId","_beacon","beaconId","_beaconSensitivity","beaconSensitivityId","_nextObject","nextObjectId","_relatedObject1","relatedObject1Id","_relatedObject2","relatedObject2Id","_relatedObject3","relatedObject3Id","_relatedObject4","relatedObject4Id","_relatedObject5","relatedObject5Id","_relatedObjects","relatedObject1","relatedObject2","relatedObject3","relatedObject4","relatedObject5","objects","beacon","nextObject","relatedObjects","IServiceWorkerStatus","IServiceWorker","injectServiceWorker","bindServiceWorker","binder","_langauge","_medium","langauge","placeholderData","title","fontSize","fontWeight","color","visible","backgroundColor","backgroundImage","mode","backButton","strokeColor","strokeSize","arrowColor","MainView","lazy","log","ISiteObjectType","Image","isLoading","setState","controller","default","mapper","route","didRequestBack","stateIn","info","Loading","opacity","pointerEvents","fallback","propsEqual","prev","next","route1","route2","sessionName","memo","mediaRequired","NeedsInternet","workspace","requiredMedia","allCached","needsInternet","CanLoad","DataNetworkConnectionNeeded","DataAvailableOffline","renderer","Renderer","canRender","hasEnoughDataToRender","canLoad","_allSiteObjectsOnFloorplan","_that","soFPs","floorPlanId","_siteObjectOnFloorplan","allSiteObjectsOnFloorplan","siteObjectOnFloorplan","_floorPlan","_pinType","pinTypeId","ITourType","SiteSupportedLanguages","first","siteLookup","ssls","ToursForLanguage","sslMatchIds","tsl","tslMatch","tslMatchTourIds","tours","CLIENT_ID","CLIENT_SECRET","GRANT_TYPE","USERNAME","PASSWORD","AUTH","SITEDATA","MEDIADIFF","MEDIA","MEDIA_WITH_ACCESS_TOKEN","settings","env","getString","static","flags","AD","AR","BE","BG","BP","BSL","CS","DE","EN","ES","FI","FR","GD","GL","GR","HU","IS","IT","JA","KO","LT","NL","NO","PL","PT","RO","RU","SE","SH","ZH","pwa","images","icon512","themeColor","routing","pathFetch","basename","manifest","theme_color","background_color","icons","src","PublicAssets","expiration","maxEntries","matcher","BuildAssets","AppToken","tokenPath","basenameIn","routes","Launch","pathPrefix","pathMatch","LanguageSelect","TourSelect","Tour","SiteObject","FloorPlan","activeSession","current","sessionUser","hasSelectedLanguage","languageSelected","isServiceWorkerRunning","worker","isRunning","Running","workerIsInterceptingFetch","isInterceptingNetworkRequests","needsMediaDownload","allMediaIds","isAllCached","canDownloadTour","byteSizeToDescription","byteSize","sizeDivisor","floor","decimalPlaces","sizeValue","pow","toFixed","ILanguageSelectType","ITourSelectType","StoreSymbol","_SetValue","collection","store","_saveUserState","UserState","_userState","getProperty","_GetValue","setProperty","module","DefaultProps","ILaunchState","ILaunchEvent","onDownloadClick","onSkipClick","detail","centerImage","downloadButton","onClick","skipButton","progressBar","barColor","textColor","ProcessEvent","processor","event","Halted","Start","_start","setStatus","UpdatingSite","FetchingSiteData","setError","navigator","onLine","hasContentInDb","sites","Error","updateSiteProgress","warn","_updateSite","Completed","Halt","None","StateProcessor","_status","Initializing","_error","_callbackStatus","onStatusChange","callback","process","_state","_callbackState","onStateChange","mapping","downloadClick","skipClick","assets","defaultProps","AwaitingUserDownloadSkipConfirmation","DownloadingMedia","downloadMediaProgress","showingUserDialog","Render","UserRequestedDownloadingMedia","UserRequestedSkipMedia","updateState","newStatus","didRequestLanguageSelect","routesEqual","dummyItem","lineHeight","titleBackgroundColor","cornerRadius","number","numberBackgroundColor","shouldGrayAfterViewing","subItems","sideMenu","foregroundImage","topBar","iconColor","showFloorPlanIcon","onBack","onFloorPlanSelect","_StateReducer","action","useReducer","List","modelDispatcher","onSiteObject","useCallback","didRequestSiteObject","onFloorPlan","didRequestFloorPlan","onLanguageSelect","onTourSelect","didRequestTourSelect","reducer","modifier","modelState","getAssociatedCache","getGlobalCache","modelResult","modelIn","document","transitionDuration","tourRelatedSiteObjects","siteObjectIds","so","allRequiredMedia","flat","CanRender","allTourRelatedSiteObjects","matchingTourRelatedSiteObjects","hasMultipleSiteObjects","suggestedAlternativeRoute","additionalRouteDataNeeded","isEqual","require","initialState","getVal","setVal","updateVal","partial","sPrev","ReactUseStateWithUpdate","modelPlaceholderData","cycler","activeTitle","nextTitle","delayBetweenChangingTitle","titleCyclerTimeout","clearUpdates","verbose","clearInterval","setInterval","stateOut","setupUpdates","hasMultipleLanguages","didRequestTour","onScroll","position","newOpacityPC","top","util","hasMultipleTours","imageUrl","startX","startY","maxZoom","minZoom","startZoom","onRequestBack","onRequestSiteObject","LOGGINGLEVELSENABLED","Trace","Info","Warn","Fatal","OUTPUTDESTINATIONS","Console","OUTPUTCONFIGURATION","Remote_ApplicationInsights","loggingLevelsEnabled","outputDestinations","outputConfiguration","_bindLog","_bindAPI","_bindAsset","routeConfig","asset","_bindCache","_bindRoute","bindVal","Cache","add","_get","associatedObject","isExtensible","keySearch","CacheController","globalCacheObj","getValue","envName","ENV","_getWindowEnv","LOG_LEVEL","getNumber","getBoolean","logger","levels","level","msg","logLevel","message","MILESTONE","TRACE","VERBOSE","debug","INFO","WARN","ERROR","FATAL","_consoleLog","_levelToApplicationInsightsLevel","SeverityLevel","Information","Verbose","Warning","Critical","remoteAILogger","debugLogEnabled","warnLogEnabled","loggingLevel","aiPackage","ApplicationInsights","instrumentationKey","authorizationKey","enableAutoRouteTracking","loggingLevelTelemetry","loggingLevelConsole","namePrefix","loadAppInsights","_setupAILogger","trackTrace","severityLevel","trackException","exception","_applicationInsightsLog","_isLogLevelEnabled","lazy_logger","instantiateLogger","loggers","consoleLogEnabled","consoleConfig","consoleLoggerInstantiator","remoteAIEnabled","remoteAIConfig","aiLoggerInstantiator","noop","milestone","trace","warning","fatal","queryString","query","pairs","substr","split","pair","k","decodeURIComponent","v","assemble","queryArgs","strPairs","encodedStr","_bindENV","_bindFetch","rejection","_bindQueryString","_bindZip","_bindKVStorage","_bindBrowser","_bindCacheController","cacheController","_bindTranslationStorage","envLoad","call","IRouteName","IRouter","injectRouter","bindRouter","router","mapRouteToProps","location","search","useUserSession","setUserState","setLanguage","loadSession","getLanguage","code","LaunchRoute","userStateInject","new","setRoute","history","newState","defaultValues","mapPropsToUserState","setCurrent","pathname","loadController","render","didLaunchAction","alternativeRoutePayload","alternativeRouteRequested","paths","splice","coordinator","component","updateStateLanguageId","newUserState","LanguageSelectRoute","pop","args1","args2","newRoute","parseInt","updateStateTourId","TourSelectRoute","renderResult","ToastMessage","TourRoute","show","toast","setToast","SiteObjectController","canPush","floorplanId","popTo","SiteObjectRoute","Controller","setController","controllerIn","_parseToInt","num","FloorplanRoute","goBack","LocationHistory","_history","_controller","findFirstPathPrefix","pathPrefixes","idxSearch","findPathPrefix","startsWith","listen","_route","launch","languageSelect","tourSelect","Router","routeTarget","curIdx","popCount","go","canPop","allRoutes","_session","grouping","_activeUserSession","_all","resultTable","resultObjects","allSessions","UserStateManager","user","resultObj","saveData","_getCurrent","_bindUserState","cacheConfig","scope","endsWith","bindMediaPlayer","IOCContext","createContext","IOCContainer","ProviderIOC","Provider","children","_map","Map","set","bindUtil","bindConfig","bindState","bindWorker","bindAll","isProduction","swEnableOverride","Boolean","REACT_APP_SWFORCE","hasServiceWorker","swEnabled","urlIsAtOrigin","href","origin","start","startServiceWorker","App","LoadingView","DOMrender","getElementById","startRenderer"],"mappings":"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,kBACd,aAAiB,kBACjB,aAAiB,IAErB,CACI,UAAc,kBACd,aAAiB,kBACjB,aAAiB,IAErB,CACI,UAAc,cACd,aAAiB,cACjB,aAAiB,IAErB,CACI,UAAc,SACd,aAAiB,SACjB,aAAiB,GAErB,CACI,UAAc,aACd,aAAiB,aACjB,aAAiB,GAErB,CACI,UAAc,gBACd,aAAiB,gBACjB,aAAiB,GAErB,CACI,UAAc,UACd,aAAiB,UACjB,aAAiB,GAErB,CACI,UAAc,eACd,aAAiB,eACjB,aAAiB,GAErB,CACI,UAAc,SACd,aAAiB,SACjB,cAAiB,GAErB,CACI,UAAc,SACd,aAAiB,SACjB,cAAiB,GAErB,CACI,UAAc,SACd,aAAiB,SACjB,cAAiB,GAErB,CACI,UAAc,SACd,aAAiB,SACjB,cAAiB,GAErB,CACI,UAAc,cACd,aAAiB,cACjB,aAAiB,GAErB,CACI,UAAc,eACd,aAAiB,eACjB,aAAiB,GAErB,CACI,UAAc,UACd,aAAiB,UACjB,aAAiB,GAErB,CACI,UAAc,eACd,aAAiB,eACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,cACd,aAAiB,cACjB,aAAiB,ICrGNA,GAbuB,CAClC,CACA,UAAc,KACd,aAAiB,KACjB,aAAiB,GAErB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,KCNN,YAACqB,GAAmB,OAAOE,KAAavD,OAAqBX,GAAUgE,ICevErB,GAlBuB,CACtC,CACI,UAAc,KACd,aAAiB,KACjB,aAAiB,GAErB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,IAErB,CACI,UAAc,aACd,aAAiB,aACjB,aAAiB,ICXN,YAACqB,GAAmB,OAAOE,KAAavD,OAAwBX,GAAUgE,ICU1ErB,GAbuB,CACtC,CACI,UAAc,KACd,aAAiB,KACjB,aAAiB,GAErB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,KCNN,YAACqB,GAAmB,OAAOE,KAAavD,OAAuBX,GAAUgE,ICezErB,GAlBuB,CACtC,CACI,UAAc,KACd,aAAiB,KACjB,aAAiB,G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BACjB,aAAiB,IAErB,CACI,UAAc,kBACd,aAAiB,kBACjB,aAAiB,IAErB,CACI,UAAc,oBACd,aAAiB,oBACjB,aAAiB,IAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,YACd,aAAiB,YACjB,aAAiB,IAErB,CACI,UAAc,sBACd,aAAiB,sBACjB,aAAiB,GAErB,CACI,UAAc,qBACd,aAAiB,qBACjB,aAAiB,GAErB,CACI,UAAc,kBACd,aAAiB,kBACjB,aAAiB,GAErB,CACI,UAAc,wBACd,aAAiB,wBACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,IAErB,CACI,UAAc,yBACd,aAAiB,yBACjB,aAAiB,GAErB,CACI,UAAc,wBACd,aAAiB,wBACjB,aAAiB,GAErB,CACI,UAAc,uBACd,aAAiB,uBACjB,aAAiB,GAErB,CACI,UAAc,oBACd,aAAiB,oBACjB,aAAiB,GAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,GAErB,CACI,UAAc,qBACd,aAAiB,qBACjB,aAAiB,IAErB,CACI,UAAc,2BACd,aAAiB,2BACjB,aAAiB,GAErB,CACI,UAAc,uBACd,aAAiB,uBACjB,aAAiB,GAErB,CACI,UAAc,sBACd,aAAiB,sBACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,yBACd,aAAiB,yBACjB,aAAiB,GAErB,CACI,UAAc,oBACd,aAAiB,oBACjB,aAAiB,IAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,GAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,IAErB,CACI,UAAc,wBACd,aAAiB,wBACjB,cAAiB,GAErB,CACI,UAAc,oBACd,aAAiB,oBACjB,aAAiB,IAErB,CACI,UAAc,kBACd,aAAiB,kBACjB,cAAiB,GAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,IAErB,CACI,UAAc,wBACd,aAAiB,wBACjB,cAAiB,GAErB,CACI,UAAc,cACd,aAAiB,cACjB,cAAiB,I,sECrKrB,SAASma,EAAyB5jB,GAC9B,OAAO0c,IAAQpa,YAAuBtC,EAAI4J,KAAKia,SAAUzZ,GAG7D,SAASkB,EAAuBtL,GAC5B,OAAO0c,IAAQ3a,WAAqB/B,EAAI4J,KAAKiB,OAAQU,KAGzD,SAASuY,EAAwC9jB,GAC7C,OAAO0c,IAAQhb,aAAyB1B,EAAI4J,KAAKma,wBAAyBja,KAG9E,SAASka,EAAwChkB,GAC7C,OAAO0c,IAAQhb,aAAyB1B,EAAI4J,KAAKqa,wBAAyBna,KAG9E,SAASoa,EAAkClkB,GACvC,OAAO0c,IAAQhb,aAAyB1B,EAAI4J,KAAKua,kBAAmBra,KAGxE,SAASsa,EAAiCpkB,GACtC,OAAO0c,IAAQzb,qBAAsCjB,EAAI4J,KAAKya,iBAAkBC,KAGpF,SAASC,EAAoCvkB,GACzC,OAAO0c,IAAQrb,iBAAiCrB,EAAI4J,KAAK4a,oBAAqBvE,KAGlF,SAASwE,EAAmCzkB,GACxC,OAAO0c,IAAQpb,gBAA+BtB,EAAI4J,KAAK8a,mBAAoB1E,KAG/E,SAAS2E,EAAsC3kB,GAC3C,OAAO0c,IAAQnb,mBAAqCvB,EAAI4J,KAAKgb,sBAAuB7E,KAGxF,SAAS8E,EAAuC7kB,GAC5C,OAAO0c,IAAQlb,oBAAuCxB,EAAI4J,KAAKkb,uBAAwBhF,KAG3F,SAASiF,EAAsC/kB,GAC3C,OAAO0c,IAAQrb,iBAAiCrB,EAAI4J,KAAKob,sBAAuB/E,KAGpF,SAASgF,EAAqCjlB,GAC1C,OAAO0c,IAAQpb,gBAA+BtB,EAAI4J,KAAKsb,qBAAsBlF,KAGjF,SAASmF,EAAwCnlB,GAC7C,OAAO0c,IAAQnb,mBAAqCvB,EAAI4J,KAAKwb,wBAAyBrF,KAG1F,SAASsF,EAAyCrlB,GAC9C,OAAO0c,IAAQlb,oBAAuCxB,EAAI4J,KAAK0b,yBAA0BxF,KAG7F,SAASyF,EAAqCvlB,GAC1C,OAAO0c,IAAQrb,iBAAiCrB,EAAI4J,KAAK4b,qBAAsBvF,KAGnF,SAASwF,EAAoCzlB,GACzC,OAAO0c,IAAQpb,gBAA+BtB,EAAI4J,KAAK8b,oBAAqB1F,KAGhF,SAAS2F,EAAuC3lB,GAC5C,OAAO0c,IAAQnb,mBAAqCvB,EAAI4J,KAAKgc,uBAAwB7F,KAGzF,SAAS8F,EAAwC7lB,GAC7C,OAAO0c,IAAQlb,oBAAuCxB,EAAI4J,KAAKkc,wBAAyBhG,KAG5F,SAAS1V,EAASU,GACd,IAAMC,EAAMC,IAAavD,OAAkBX,EAAUgE,GAyBrD,OAtBAC,EAAIgb,OAA8BnC,EAClC7Y,EAAImB,KAA8BZ,EAClCP,EAAIib,sBAA8BlC,EAClC/Y,EAAIkb,sBAA8BjC,EAClCjZ,EAAImb,gBAA8BhC,EAClCnZ,EAAI0W,eAA8B2C,EAElCrZ,EAAIob,kBAA8B5B,EAClCxZ,EAAIqb,iBAA8B3B,EAClC1Z,EAAIsb,oBAA8B1B,EAClC5Z,EAAIub,qBAA8BzB,EAElC9Z,EAAIwb,oBAA8BxB,EAClCha,EAAIyb,mBAA8BvB,EAClCla,EAAI0b,sBAA8BtB,EAClCpa,EAAI2b,uBAA8BrB,EAElCta,EAAI4b,mBAA8BpB,EAClCxa,EAAI6b,kBAA8BnB,EAClC1a,EAAI8b,qBAA8BlB,EAClC5a,EAAI+b,sBAA8BjB,EAE3B9a,EAGIX,O,qCCvHV2c,E,gEAAAA,K,sBAAAA,E,aAAAA,M,KAKL,IAAMC,GAAyC,mBAC1CD,EAAUE,UAAY,IADoB,cAE1CF,EAAUG,KAAO,IAFyB,GAKzCC,GAA6E,mBAC9EJ,EAAUE,WAAY,SAACG,GAAD,sBAChBA,EAAMC,mBAFkE,cAI9EN,EAAUG,MAAO,SAACE,GAAD,MAA2B,MAJkC,GAsBnF,SAASE,EAAaC,GAGlB,IAFA,IAAIC,EAAO,UAEDhN,EAAE,EAAGA,EAAE+M,EAAO/M,IACpBgN,GAAQ,IAGZ,OAAOA,EA8BIC,IA3Bf,SAAcL,GACV,IAAMnI,EAAQ,SAACyI,GAAD,OApBX,SAAyBA,EAAiBN,GAM7C,OALcna,OAAO0a,OAAO,GACxBX,EAASU,GACTP,EAAiBO,GAAMN,IAiBQQ,CAAgBF,EAAMN,IACnDS,EAAY,SAACH,GAAD,OA3Bf,SAA6BI,EAAoBV,GACpD,IAAMza,EAAOmb,EAAQC,WACfC,EAAYC,IAAOtb,GACzB,cAAOqb,QAAP,IAAOA,IAAa,GAwBmBE,CAAoBR,IAFd,EAGPS,mBAAiB,GAHV,mBAGtCC,EAHsC,KAGzBC,EAHyB,KAKvCC,EAAMC,sBAUZ,OARAC,qBAAU,WACN,IAAMja,EAAUka,YAAW,WACvBJ,GAAe,SAAA3iB,GAAG,OAAIA,EAAM,EAAI,EAAIA,EAAI,OACzC,KAEH,OAAO,kBAAMgjB,aAAana,OAI1B,qBACIsZ,UAAWA,EAAUd,EAAUE,WAC/BhI,MAAOA,EAAM8H,EAAUE,WAF3B,SAGI,sBACIqB,IAAKA,EACLT,UAAWA,EAAUd,EAAUG,MAC/BjI,MAAOA,EAAM8H,EAAUG,MAH3B,SAGmCI,EAAac,S,6BCxE5D,6CAMO,SAASO,EAAuBhc,EAAc5B,GACjD,IAEM6d,EAFMtjB,cACaujB,oBANE,2BAM6D,IACpDlc,GAEpC,OADeic,EAAiBA,EAAe7d,GAAOA,I,6BCJ1D,IAqBetB,EArBuB,CAAC,CACnC,UAAa,KACb,aAAgB,KAChB,aAAgB,GAEpB,CACI,UAAa,OACb,aAAgB,gBAChB,aAAgB,IAEpB,CACI,UAAa,OACb,aAAgB,OAChB,aAAgB,IAEpB,CACI,UAAa,YACb,aAAgB,YAChB,cAAgB,I,OCfL,aAACqB,GAAmB,OAAOE,IAAavD,OAAqBX,EAAUgE,K,gEC8PvErB,EAhQuB,CAClC,CACA,UAAc,KACd,aAAiB,KACjB,aAAiB,GAEjB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,IAErB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,GAErB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,GAErB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,GAErB,CACI,UAAc,OACd,aAAiB,OACjB,aAAiB,GAErB,CACI,UAAc,cACd,aAAiB,cACjB,cAAiB,GAErB,CACI,UAAc,cACd,aAAiB,cACjB,cAAiB,GAErB,CACI,UAAc,cACd,aAAiB,cACjB,cAAiB,GAErB,CACI,UAAc,eACd,aAAiB,eACjB,aAAiB,GAErB,CACI,UAAc,SACd,aAAiB,SACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,WACd,aAAiB,WACjB,aAAiB,GAErB,CACI,UAAc,sBACd,aAAiB,sBACjB,aAAiB,GAErB,CACI,UAAc,WACd,aAAiB,WACjB,aAAiB,GAErB,CACI,UAAc,aACd,aAAiB,aACjB,aAAiB,IAErB,CACI,UAAc,YACd,aAAiB,YACjB,aAAiB,IAErB,CACI,UAAc,eACd,aAAiB,eACjB,aAAiB,GAErB,CACI,UAAc,eACd,aAAiB,eACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,mBACd,aAAiB,mBACjB,aAAiB,GAErB,CACI,UAAc,wBACd,aAAiB,wBACjB,cAAiB,GAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,IAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,IAErB,CACI,UAAc,wBACd,aAAiB,wBACjB,cAAiB,GAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,IAErB,CACI,UAAc,0BACd,aAAiB,0BACjB,aAAiB,IAErB,CACI,UAAc,kBACd,aAAiB,kBACjB,cAAiB,GAErB,CACI,UAAc,oBACd,aAAiB,oBACjB,aAAiB,IAErB,CACI,UAAc,oBACd,aAAiB,oBACjB,aAAiB,IAErB,CACI,UAAc,kBACd,aAAiB,kBACjB,cAAiB,GAErB,CACI,UAAc,sBACd,aAAiB,sBACjB,cAAiB,GAErB,CACI,UAAc,yBACd,aAAiB,yBACjB,cAAiB,GAErB,CACI,UAAc,8BACd,aAAiB,8BACjB,cAAiB,GAErB,CACI,UAAc,8BACd,aAAiB,8BACjB,cAAiB,GAErB,CACI,UAAc,oBACd,aAAiB,oBACjB,cAAiB,GAErB,CACI,UAAc,iBACd,aAAiB,iBACjB,aAAiB,IAErB,CACI,UAAc,eACd,aAAiB,eACjB,cAAiB,GAErB,CACI,UAAc,kBACd,aAAiB,kBACjB,aA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","file":"static/js/main.146f009e.chunk.js","sourcesContent":["\n\n\nimport db from '../../private/db';\nimport { IModelSource} from './db.if';\nimport IBaseDto from './IBaseDto';\n\nconst TABLES = {\n IBackgroundModeDto : 'IBackgroundModeDto',\n IBeaconDto : 'IBeaconDto',\n IBeaconSensitivityDto : 'IBeaconSensitivityDto',\n IFloorPlanDto : 'IFloorPlanDto',\n IFontFamilyDto : 'IFontFamilyDto',\n IFontStyleDto : 'IFontStyleDto',\n IFontSizeUnitDto : 'IFontSizeUnitDto',\n IFontAlignmentDto : 'IFontAlignmentDto',\n ILanguageDto : 'ILanguageDto',\n IMediumDto : 'IMediumDto',\n IMenuItemDto : 'IMenuItemDto',\n IPinTypeDto : 'IPinTypeDto',\n IScreenorientationDto : 'IScreenorientationDto',\n ISiteDto : 'ISiteDto',\n ISiteObjectDto : 'ISiteObjectDto',\n ISiteObjectOnFloorPlanDto : 'ISiteObjectOnFloorPlanDto',\n ISiteObjectKeywordDto : 'ISiteObjectKeywordDto',\n ISiteObjectTranslationDto : 'ISiteObjectTranslationDto',\n ISiteObjectTypeDto : 'ISiteObjectTypeDto',\n ISiteSupportedLanguageDto : 'ISiteSupportedLanguageDto',\n IStyleDto : 'IStyleDto',\n ITourDto : 'ITourDto',\n ITourStatusDto : 'ITourStatusDto',\n ITourSubTypeDto : 'ITourSubTypeDto',\n ITourTranslationDto : 'ITourTranslationDto',\n ITourTypeDto : 'ITourTypeDto',\n ITourSupportedLanguageDto : 'ITourSupportedLanguageDto',\n}\n\nfunction loadAll(db: IModelSource, tableName: string, ctor: (data: any) => T): Promise> {\n return new Promise(async function(resolve, reject) {\n const all = await db.all(tableName);\n const mapped = all.map(x => ctor(x))\n resolve(mapped);\n });\n}\n\nfunction load(db: IModelSource, tableName: string, id: number|string, ctor: (data: any) => T): Promise {\n return new Promise(function(resolve, reject) {\n db.get(tableName, id)\n .then(x => {\n resolve(ctor(x))\n })\n .catch((error: Error) => reject(error));\n });\n}\n\nexport default {\n loadBackgroundModeId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IBackgroundModeDto, id, ctor),\n loadBeaconId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IBeaconDto, id, ctor),\n loadBeaconSensitivityId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IBeaconSensitivityDto, id, ctor),\n loadFloorplanId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IFloorPlanDto, id, ctor),\n loadFontFamilyId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IFontFamilyDto, id, ctor),\n loadFontStyleId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IFontStyleDto, id, ctor),\n loadFontSizeUnitId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IFontSizeUnitDto, id, ctor),\n loadFontAlignmentId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IFontAlignmentDto, id, ctor),\n loadLanguageId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ILanguageDto, id, ctor),\n loadMediumId : (db: IModelSource, guid: string, ctor: (data: any) => T) => load(db, TABLES.IMediumDto, guid, ctor),\n loadMenuItemId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IMenuItemDto, id, ctor),\n loadPinTypeId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IPinTypeDto, id, ctor),\n loadScreenOrientationId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IScreenorientationDto, id, ctor),\n loadSiteId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ISiteDto, id, ctor),\n loadSiteObjectId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ISiteObjectDto, id, ctor),\n loadSiteObjectOnFloorplanId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ISiteObjectOnFloorPlanDto, id, ctor),\n loadSiteObjectKeywordId : (db: IModelSource, guid: string, ctor: (data: any) => T) => load(db, TABLES.ISiteObjectKeywordDto, guid, ctor),\n loadSiteObjectTranslationId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ISiteObjectTranslationDto, id, ctor),\n loadSiteObjectTypeId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ISiteObjectTypeDto, id, ctor),\n loadSiteSupportedLanguageId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ISiteSupportedLanguageDto, id, ctor),\n loadStyleId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.IStyleDto, id, ctor),\n loadTourId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ITourDto, id, ctor),\n loadTourStatusId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ITourStatusDto, id, ctor),\n loadTourSubTypeId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ITourSubTypeDto, id, ctor),\n loadTourTranslations : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ITourTranslationDto, id, ctor),\n loadTourTypeId : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ITourTypeDto, id, ctor),\n loadTourSupportedLanguage : (db: IModelSource, id: number, ctor: (data: any) => T) => load(db, TABLES.ITourSupportedLanguageDto, id, ctor),\n\n allBackgroundModes : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IBackgroundModeDto, ctor),\n allBeacons : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IBeaconDto, ctor),\n allBeaconSensitivitys : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IBeaconSensitivityDto, ctor),\n allFloorplans : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IFloorPlanDto, ctor),\n allFontFamilys : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IFontFamilyDto, ctor),\n allFontStyles : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IFontStyleDto, ctor),\n allFontSizeUnits : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IFontSizeUnitDto, ctor),\n allFontAlignments : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IFontAlignmentDto, ctor),\n allLanguages : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ILanguageDto, ctor),\n allMediums : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IMediumDto, ctor),\n allMenuItems : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IMenuItemDto, ctor),\n allPinTypes : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IPinTypeDto, ctor),\n allScreenOrientations : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IScreenorientationDto, ctor),\n allSites : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ISiteDto, ctor),\n allSiteObjects : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ISiteObjectDto, ctor),\n allSiteObjectOnFloorplan : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ISiteObjectOnFloorPlanDto, ctor),\n allSiteObjectKeywords : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ISiteObjectKeywordDto, ctor),\n allSiteObjectTranslations : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ISiteObjectTranslationDto, ctor),\n allSiteObjectTypes : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ISiteObjectTypeDto, ctor),\n allSiteSupportedLanguages : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ISiteSupportedLanguageDto, ctor),\n allStyles : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.IStyleDto, ctor),\n allTours : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ITourDto, ctor),\n allTourStatuss : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ITourStatusDto, ctor),\n allTourSubTypes : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ITourSubTypeDto, ctor),\n allTourTranslations : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ITourTranslationDto, ctor),\n allTourTypes : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ITourTypeDto, ctor),\n allTourSupportedLanguages : (db: IModelSource, ctor: (data: any) => T) => loadAll(db, TABLES.ITourSupportedLanguageDto, ctor),\n}\n\n","import PPromise from 'p-progress';\nimport { IContainer, ILazyBinder, injectContainer } from './container';\n\n\nexport interface IEnv {\n getValue: (envName: string) => T|null;\n getValueWithDefault: (envName: string, defaultValue: T) => T;\n getNumber: (name: string, defaultValue?: number) => number;\n getBoolean: (name: string, defaultValue?: boolean) => boolean;\n getString: (name: string, defaultValue?: string) => string;\n}\n\nexport interface IFetchHeader {\n name: string;\n value: string;\n};\n\nexport type Method = \"GET\" | \"PUT\" | \"PATCH\" | \"POST\" | \"DELETE\" | \"OPTIONS\";\nexport type ResponseTypes = \"json\" | \"text\" | \"blob\";\n\nexport interface IFetchRequest {\n url: string;\n method?: Method;\n headers?: Array;\n body?: string;\n expectedResponseType?: ResponseTypes;\n expectedResponseSize?: number;\n};\n\nexport interface IFetchResponse {\n request: IFetchRequest;\n statusCode: number;\n isStatusOk: boolean;\n error?: Error;\n payload: T|null;\n};\n\nexport type IFetcher = (requestPayload: IFetchRequest, timeout?: number) => PPromise> ;\n\nexport interface ILog {\n milestone: (msg: any) => void,\n verbose: (msg: any) => void,\n trace: (msg: any) => void,\n info: (msg: any) => void,\n warn: (msg: any) => void,\n warning: (msg: any) => void,\n error: (msg: any) => void,\n fatal: (msg: any) => void,\n}\n\nexport interface IQueryURL {\n parse: (queryString: string) => {},\n assemble: (queryArgs: {}) => string,\n}\n\ninterface IUnzipEntry {\n versionMadeBy: number;\n versionNeededToExtract: number;\n generalPurposeBitFlag: number;\n compressionMethod: number;\n lastModTime: number;\n lastModDate: number;\n crc32: number;\n compressedSize: number;\n uncompressedSize: number;\n internalAttributes: number;\n externalAttributes: number;\n localHeaderOffset: number;\n name: string;\n commment: string;\n extraFields: object[];\n}\n\ntype IUnzipReadEntriesCallback = (err: Error, entries: IUnzipEntry[]) => void;\ntype IUnzipReadEntryDataCallback = (err: Error, readStream: IZipReadStream) => void;\n\ninterface IUnzipFile {\n readEntries: (callback: IUnzipReadEntriesCallback) => void;\n readEntryData: (entry: IUnzipEntry, checkCrc: boolean, callback: IUnzipReadEntryDataCallback) => void;\n}\n\ntype IReadStreamCallback = (value: any) => void;\ntype IReadStreamEvent = 'data'|'error'|'end';\n\ninterface IZipReadStream {\n on: (event: IReadStreamEvent, callback: IReadStreamCallback) => void;\n}\n\nexport interface IZip {\n unzipFile: (blobData: Blob, fileName: string) => Promise;\n unzipAll: (blobData: Blob, destDirectoryPrefix: string) => Promise<{ [keyof: string]: T }>;\n listings: (blobData: Blob) => Promise>;\n}\n\nexport interface IKVStorage {\n getItem: (key: any) => Promise;\n setItem: (key: any, value: any) => Promise;\n removeItem: (key: any) => Promise;\n clear: () => Promise;\n length: () => Promise;\n}\n\nexport enum IBrowserPlatform {\n Unknown = 0,\n MobileiOS = 1,\n MobileAndroid = 2,\n}\n\nexport interface IBrowser {\n platform: IBrowserPlatform,\n isMobile: boolean,\n isInstalled: boolean,\n}\n\nexport interface ICache {\n add: (key: string|symbol, value: any) => void;\n get: (key: string|symbol) => any;\n}\n\nexport interface ICacheController {\n getAssociatedCache: (associatedObject: any) => ICache|null;\n getGlobalCache: () => ICache;\n}\n\nexport type LANGUAGE_CODE = \"cs\" | \"de\" | \"en\" | \"es\" | \"fr\" | \"it\" | \"ja\" | \"ko\" | \"pl\" | \"pt\" | \"ru\" | \"zh\" | \"nl\" | \"ar\" | \"bp\" | \"ga\" | \"gd\";\n\nexport interface ITranslationStorage {\n translation: (language: LANGUAGE_CODE, key: string, parameters?: Array, fallback?: string) => string;\n}\n\nconst TYPES = {\n IEnv: Symbol.for(\"IEnv\"),\n IFetch: Symbol.for(\"IFetch\"),\n ILog: Symbol.for(\"ILog\"),\n IQueryURL: Symbol.for(\"IQueryURL\"),\n IZip: Symbol.for(\"IZip\"),\n IKVStorage: Symbol.for(\"IKVStorage\"),\n IBrowser: Symbol.for(\"IBrowser\"),\n ICache: Symbol.for(\"ICache\"),\n ICacheController: Symbol.for(\"ICacheController\"),\n ITranslationStorage: Symbol.for(\"ITranslationStorage\"),\n}\n\n\nexport function injectENV(container: IContainer = injectContainer()): IEnv {\n return container.get(TYPES.IEnv);\n}\n\nexport function bindENV(val: IEnv, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IEnv, val);\n}\n\n\nexport function injectFetch(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IFetch)();\n}\n\nexport function bindFetch(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IFetch, val);\n}\n\n\nexport function injectLog(container: IContainer = injectContainer()): ILog {\n return container.get(TYPES.ILog);\n}\n\nexport function bindLog(val: ILog, container: IContainer = injectContainer()) {\n return container.bind(TYPES.ILog, val);\n}\n\n\nexport function injectQueryURL(container: IContainer = injectContainer()): IQueryURL {\n return container.get(TYPES.IQueryURL);\n}\n\nexport function bindQueryURL(val: IQueryURL, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IQueryURL, val);\n}\n\n\nexport function injectZip(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IZip)();\n}\n\nexport function bindZip(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IZip, val);\n}\n\n\nexport function injectKVStorage(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IKVStorage)();\n}\n\nexport function bindKVStorage(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IKVStorage, val);\n}\n\n\nexport function injectBrowser(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IBrowser)();\n}\n\nexport function bindBrowser(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IBrowser, val);\n}\n\n\nexport function injectCache(container: IContainer = injectContainer()): ICache {\n return container.get(TYPES.ICache);\n}\n\nexport function bindCache(val: ICache, container: IContainer = injectContainer()) {\n return container.bind(TYPES.ICache, val);\n}\n\n\nexport function injectCacheController(container: IContainer = injectContainer()): ICacheController {\n return container.get(TYPES.ICacheController);\n}\n\nexport function bindCacheController(val: ICacheController, container: IContainer = injectContainer()) {\n return container.bind(TYPES.ICacheController, val);\n}\n\n\nexport function injectTranslationStorage(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.ITranslationStorage)();\n}\n\nexport function bindTranslationStorage(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.ITranslationStorage, val);\n}\n\n","\n\nimport IMapProperty from './IMapProperty';\nimport BaseDto from './IBaseDto';\n\nfunction _addMappingsToObject(mappings: Array, sourceObject: Object, destObject: T) {\n if ( !sourceObject ) { return; }\n\n for ( const property of mappings ) {\n let newValue: any = (destObject as any)[property.localName] ?? null;\n const externalName = property.externalName;\n\n if ( property.removeValueOnImport ?? false ) {\n /* ignore */\n continue;\n } else if ( property.customImport ) {\n newValue = property.customImport(sourceObject)\n } else if ( sourceObject.hasOwnProperty(externalName) ) { \n newValue = (sourceObject as any)[externalName] as (typeof property.defaultValue);\n } else if ( property.defaultValue != null && !newValue ) {\n newValue = property.defaultValue as (typeof property.defaultValue);\n }\n \n (destObject as any)[property.localName] = newValue;\n } \n}\n\nfunction create(mappings: Array, sourceObject?: Object, entityName: string = 'BaseDto'): T {\n let newEntity = {};\n newEntity.apply = () => { return apply(mappings, newEntity); };\n newEntity.flatten = () => { return flatten(newEntity, mappings) };\n newEntity.mappings = () => { return mappings; }\n\n if ( sourceObject ) {\n _addMappingsToObject(mappings, sourceObject, newEntity);\n }\n \n return newEntity;\n}\n\n/** take an incoming IMapProperty[] and generate a new object with the sourceObject */\nfunction apply(mappings: Array, sourceObject: Object): T {\n let newEntity = create(mappings);\n\n /* if we are given an existing entity, flatten it out & apply that */\n if ( sourceObject.hasOwnProperty('flatten') ) {\n const sourceEntity = sourceObject as BaseDto;\n _addMappingsToObject(mappings, sourceEntity.flatten(), newEntity);\n } else {\n _addMappingsToObject(mappings, sourceObject, newEntity);\n }\n\n return newEntity;\n}\n\nfunction flatten(entity: Object, mappings?: Array): {} {\n let flattenObject = {};\n\n for ( const property of mappings ?? [] ) {\n let value = (property as any)['defaultValue'];\n const keySave = (property as any)['externalName'];\n const keyGet = (property as any)['localName'];\n\n if ( property.removeValueOnExport ?? false ) {\n /* ignore */\n continue;\n } else if ( property.customExport ) {\n value = property.customExport(entity);\n } else if ( entity.hasOwnProperty(keyGet) ) {\n value = (entity as any)[keyGet];\n }\n\n (flattenObject as any)[keySave] = value;\n }\n\n return flattenObject;\n}\n\nexport default {\n create,\n apply,\n flatten,\n}","\nimport { IContainer, injectContainer } from './container';\n\nexport enum IConfigLogLevel {\n Undef = 0,\n Milestone = 1,\n Trace = 2,\n Verbose = 3,\n Info = 4,\n Warn = 5,\n Error = 6,\n Fatal = 7,\n LastValue = 8,\n}\n\nexport enum IConfigLogDestination {\n Undef = 0,\n Console = 1,\n Remote_ApplicationInsights = 2,\n LastValue = 3,\n}\n\nexport interface IConfigLogSettings {\n authorizationKey?: string;\n name?: string;\n}\n\nexport interface IConfigLog {\n loggingLevelsEnabled: Array;\n outputDestinations: Array;\n outputConfiguration: Record;\n}\n\nexport interface IConfigAPI {\n url: string,\n auth: {\n clientId: string,\n clientSecret: string,\n grantType: string,\n username: string,\n password: string,\n },\n extension: {\n auth: string,\n siteData: string,\n mediaDiff: string,\n media: string,\n }\n}\n\nexport interface IConfigAssets {\n static: {\n flags: Record\n },\n pwa: {\n images: {\n icon512: string,\n },\n themeColor: string,\n backgroundColor: string,\n name: string,\n },\n}\n\nexport enum IConfigCacheName {\n Undef = 0,\n BuildAssets = 1,\n PublicAssets = 2,\n WorkspaceMedia = 3,\n AppToken = 4,\n LastValue = 5,\n}\n\nexport interface IConfigCacheAssets {\n cacheName: string;\n expiration: number;\n maxEntries: number;\n matcher: RegExp;\n}\n\nexport interface IConfigCacheOAuthToken {\n tokenPath: string;\n}\n\n\nexport type IConfigCache = Record<\n IConfigCacheName.PublicAssets|\n IConfigCacheName.BuildAssets|\n IConfigCacheName.WorkspaceMedia|\n IConfigCacheName.AppToken, \n IConfigCacheAssets|IConfigCacheOAuthToken>;\n\nexport enum IConfigRoutePath {\n Undef = 0,\n Launch = 1,\n LanguageSelect = 2,\n TourSelect = 3,\n Tour = 4,\n SiteObject = 5,\n FloorPlan = 6,\n LastValue = 7,\n}\n\nexport interface IRouteConfigSettings {\n pathPrefix: string;\n pathMatch: Array;\n}\n\nexport type IConfigRoute = {\n basename: string;\n routes: Record<\n IConfigRoutePath.Launch | IConfigRoutePath.LanguageSelect | IConfigRoutePath.TourSelect | IConfigRoutePath.Tour | IConfigRoutePath.SiteObject | IConfigRoutePath.FloorPlan,\n IRouteConfigSettings>;\n} \n\nconst TYPES = {\n IConfigLog: Symbol.for(\"IConfigLog\"),\n IConfigAPI: Symbol.for(\"IConfigAPI\"),\n IConfigAssets: Symbol.for(\"IConfigAssets\"),\n IConfigCache: Symbol.for(\"IConfigCache\"),\n IConfigRoute: Symbol.for(\"IConfigRoute\"),\n}\n\nexport function injectConfigLog(container: IContainer = injectContainer()): IConfigLog {\n return container.get(TYPES.IConfigLog);\n}\n\nexport function bindConfigLog(val: IConfigLog, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigLog, val);\n}\n\n\nexport function injectConfigAPI(container: IContainer = injectContainer()): IConfigAPI {\n return container.get(TYPES.IConfigAPI);\n}\n\nexport function bindConfigAPI(val: IConfigAPI, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigAPI, val);\n}\n\n\nexport function injectConfigAssets(container: IContainer = injectContainer()): IConfigAssets {\n return container.get(TYPES.IConfigAssets);\n}\n\nexport function bindConfigAssets(val: IConfigAssets, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigAssets, val);\n}\n\n\nexport function injectConfigCache(container: IContainer = injectContainer()): IConfigCache {\n return container.get(TYPES.IConfigCache);\n}\n\nexport function bindConfigCache(val: IConfigCache, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigCache, val);\n}\n\n\nexport function injectConfigRoute(container: IContainer = injectContainer()): IConfigRoute {\n return container.get(TYPES.IConfigRoute);\n}\n\nexport function bindConfigRoute(val: IConfigRoute, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigRoute, val);\n}\n\n","\n\nexport interface IContainer {\n get: (key: symbol) => T;\n bind: (key: symbol, val: T) => void; \n}\n\nexport type ILazyBinder = () => Promise;\n\nexport function injectContainer(): IContainer {\n return (global as any).container as IContainer;\n}\n\nexport function bindContainer(container: IContainer) {\n (global as any).container = container;\n}\n\n","\nexport interface IContainer {\n get: (key: symbol) => T;\n bind: (key: symbol, val: T) => void; \n}\n\nexport type ILazyBinder = () => Promise;\n\nconst TYPES = {\n IContainer: Symbol.for(\"IContainer\"),\n}\n\nexport function injectContainer(): IContainer {\n return (global as any).container as IContainer;\n}\n\nexport function bindContainer(container: IContainer) {\n (global as any).container = container;\n}\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'logoFileName',\n 'externalName' : 'logoFileName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'removeLogo',\n 'externalName' : 'removeLogo',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'logoMediumId',\n 'externalName' : 'logoMediumId',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'alarmEnabled',\n 'externalName' : 'alarmEnabled',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'alarmPin',\n 'externalName' : 'alarmPin',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'adminPin',\n 'externalName' : 'adminPin',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'languageSelectionMenu',\n 'externalName' : 'languageSelectionMenu',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourSelectionMenu',\n 'externalName' : 'tourSelectionMenu',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'clientId',\n 'externalName' : 'clientId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'screenOrientationId',\n 'externalName' : 'screenOrientationId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'majorVersion',\n 'externalName' : 'majorVersion',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'minorVersion',\n 'externalName' : 'minorVersion',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'toursCount',\n 'externalName' : 'toursCount',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'deviceAccountsCount',\n 'externalName' : 'deviceAccountsCount',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'languageSelectionStyleId',\n 'externalName' : 'languageSelectionStyleId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourSelectionStyleId',\n 'externalName' : 'tourSelectionStyleId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\nimport ISiteDto from \"./SiteDto.if\";\nimport mappings from \"./SiteDto.map\";\nimport IMediumDto from \"./MediumDto.if\";\nimport MediumDto from \"./MediumDto\";\nimport IScreenOrientationDto from \"./ScreenOrientationDto.if\";\nimport ScreenOrientationDto from \"./ScreenOrientationDto\";\nimport IStyleDto from \"./StyleDto.if\";\nimport StyleDto from \"./StyleDto\";\n\nimport Transformers from './private/transformer';\nimport { IModelSource } from \"./private/db.if\";\nimport DBUtil from './private/db.util';\nimport ISiteSupportedLanguageDto from \"./SiteSupportedLanguageDto.if\";\nimport SiteSupportedLanguageDto from \"./SiteSupportedLanguageDto\";\n\n\nfunction _imageLogo (this: ISiteDto, db: IModelSource): Promise {\n return DBUtil.loadMediumId(db, this.logoMediumId, MediumDto);\n}\n\nfunction _screenOrientation(this: ISiteDto, db: IModelSource): Promise {\n return DBUtil.loadScreenOrientationId(db, this.screenOrientationId, ScreenOrientationDto);\n}\n\nfunction _languageSelectionStyle(this: ISiteDto, db: IModelSource): Promise {\n return DBUtil.loadStyleId(db, this.languageSelectionStyleId, StyleDto);\n}\n\nfunction _tourSelectionStyle(this: ISiteDto, db: IModelSource): Promise {\n return DBUtil.loadStyleId(db, this.tourSelectionStyleId, StyleDto);\n}\n\nfunction _siteSupportedLanguages(this: ISiteDto, db: IModelSource): Promise {\n const self = this;\n return new Promise(async function(resolve, reject) {\n const ssl = await DBUtil.allSiteSupportedLanguages(db, SiteSupportedLanguageDto);\n const sslMatch = ssl.filter(x => x.siteId === self.id);\n resolve(sslMatch);\n })\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.imageLogo = _imageLogo;\n obj.screenOrientation = _screenOrientation;\n obj.languageSelectionStyle = _languageSelectionStyle;\n obj.tourSelectionStyle = _tourSelectionStyle;\n\n obj.siteSupportedLanguages = _siteSupportedLanguages;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'mediumHash',\n 'externalName' : 'mediumHash',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'fileName',\n 'externalName' : 'fileName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'mimeType',\n 'externalName' : 'mimeType',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'mediumSize',\n 'externalName' : 'mediumSize',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'deleted',\n 'externalName' : 'deleted',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IMediumDto from \"./MediumDto.if\";\nimport mappings from \"./MediumDto.map\";\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from \"./SiteDto\";\n\nimport { IModelSource } from \"./private/db.if\";\nimport Transformers from './private/transformer';\nimport DBUtil from './private/db.util';\nimport SiteObjectTranslationDto from \"./SiteObjectTranslationDto\";\nimport ILanguageDto from \"./LanguageDto.if\";\nimport LanguageDto from \"./LanguageDto\";\n\nfunction _site(this: IMediumDto, db: IModelSource): Promise {\n return DBUtil.loadSiteId(db, this.siteId, SiteDto);\n}\n\nfunction _languages(this: IMediumDto, db: IModelSource): Promise {\n const self = this;\n\n return new Promise(async function(resolve, reject) {\n try {\n /* this is ineffecient, but works. Fetch all translations, filter until the mediumId matches this & then fetch the related languages */\n const allSOTs = await DBUtil.allSiteObjectTranslations(db, SiteObjectTranslationDto);\n const matchSOTs = allSOTs.filter(sot => sot.mediumId === self.id);\n const languageIds = matchSOTs.map(sot => sot.languageId);\n const languages = await Promise.all(languageIds.map(id => DBUtil.loadLanguageId(db, id, LanguageDto)));\n\n resolve(languages);\n } catch (error) {\n reject(`Error occured fetching MediumDto.languages: ${error}`);\n }\n })\n};\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data);\n\n /* addLinkables */\n obj.site = _site;\n obj.languages = _languages;\n\n return obj;\n}\n\n","\nexport interface IBaseControllerProps {\n\n}\n\nexport interface IBaseRouteArguments {\n\n}\n\nexport interface IBaseControllerRenderResult {\n hasEnoughDataToRender: boolean;\n suggestedAlternativeRoute?: \"Launch\" | \"LanguageSelect\" | \"TourSelect\" | \"Tour\" | \"SiteObject\" | \"FloorPlan\";\n additionalRouteDataNeeded?: T;\n}\n\nexport enum DataCheckResult {\n Undef = 0,\n DataAvailableOffline = 1,\n DataNetworkConnectionNeeded = 2,\n LastValue = 3,\n}\n\nexport interface IBaseController {\n renderer: (args: T) => JSX.Element;\n canRender: (route: R) => Promise>;\n canLoad: (route: R) => Promise;\n}\n","\nimport { IContainer, injectContainer } from './container';\n\n\nexport interface IStateUserSession {\n id: number;\n\n sessionName: string;\n grouping: string;\n languageId: number;\n tourId: number;\n\n setCurrent: () => void;\n}\n\nexport interface IStateUserSessionManager {\n get: (user: string) => Promise;\n save: (user: IStateUserSession) => Promise;\n remove: (user: IStateUserSession) => Promise;\n current: () => Promise;\n new: () => IStateUserSession;\n}\n\nconst TYPES = {\n IStateUserManager: Symbol.for(\"IStateUserManager\"),\n}\n\nexport function injectUserSession(container: IContainer = injectContainer()): IStateUserSessionManager {\n return container.get(TYPES.IStateUserManager);\n}\n\nexport function bindUserSession(val: IStateUserSessionManager, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IStateUserManager, val);\n}\n","import { IContainer, injectContainer } from \"./container\";\n\n\nexport interface IConfigAPI {\n url: string,\n auth: {\n clientId: string,\n clientSecret: string,\n grantType: string,\n username: string,\n password: string,\n },\n extension: {\n auth: string,\n siteData: string,\n mediaDiff: string,\n media: string,\n }\n}\n\nexport interface IConfigAssets {\n flags: Record\n}\n\nexport enum IConfigCacheName {\n Undef = 0,\n BuildAssets = 1,\n PublicAssets = 2,\n WorkspaceMedia = 3,\n AppToken = 4,\n LastValue = 5,\n}\n\nexport interface IConfigCacheAssets {\n cacheName: string;\n expiration: number;\n maxEntries: number;\n matcher: RegExp;\n}\n\nexport type IConfigCache = Record;\n\nexport enum IConfigRoutePath {\n Undef = 0,\n Launch = 1,\n LanguageSelect = 2,\n TourSelect = 3,\n Tour = 4,\n SiteObject = 5,\n FloorPlan = 6,\n LastValue = 7,\n}\n\nexport interface IRouteConfigSettings {\n pathPrefix: string;\n pathMatch: Array;\n}\n\nexport type IConfigRoute = Record;\n\nconst TYPES = {\n IConfigAPI: Symbol.for(\"IConfigAPI\"),\n IConfigAssets: Symbol.for(\"IConfigAssets\"),\n IConfigCache: Symbol.for(\"IConfigCache\"),\n IConfigRoute: Symbol.for(\"IConfigRoute\"),\n}\n\nexport function injectConfigAPI(container: IContainer = injectContainer()): IConfigAPI {\n return container.get(TYPES.IConfigAPI);\n}\n\nexport function bindConfigAPI(val:IConfigAPI, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigAPI, val);\n}\n\n\nexport function injectConfigAssets(container: IContainer = injectContainer()): IConfigAssets {\n return container.get(TYPES.IConfigAssets);\n}\n\nexport function bindConfigAssets(val:IConfigAssets, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigAssets, val);\n}\n\n\nexport function injectConfigCache(container: IContainer = injectContainer()): IConfigCache {\n return container.get(TYPES.IConfigCache);\n}\n\nexport function bindConfigCache(val:IConfigCache, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigCache, val);\n}\n\n\nexport function injectConfigRoute(container: IContainer = injectContainer()): IConfigRoute {\n return container.get(TYPES.IConfigRoute);\n}\n\nexport function bindConfigRoute(val:IConfigRoute, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IConfigRoute, val);\n}\n","import PPromise from 'p-progress';\nimport { IContainer, ILazyBinder, injectContainer } from './container';\n\n\nexport interface IEnv {\n getValue: (envName: string) => T|null;\n getValueWithDefault: (envName: string, defaultValue: T) => T;\n getNumber: (name: string, defaultValue?: number) => number;\n getBoolean: (name: string, defaultValue?: boolean) => boolean;\n getString: (name: string, defaultValue?: string) => string;\n}\n\nexport interface IFetchHeader {\n name: string;\n value: string;\n};\n\nexport type Method = \"GET\" | \"PUT\" | \"PATCH\" | \"POST\" | \"DELETE\" | \"OPTIONS\";\nexport type ResponseTypes = \"json\" | \"text\" | \"blob\";\n\nexport interface IFetchRequest {\n url: string;\n method?: Method;\n headers?: Array;\n body?: string;\n expectedResponseType?: ResponseTypes;\n expectedResponseSize?: number;\n};\n\nexport interface IFetchResponse {\n request: IFetchRequest;\n statusCode: number;\n isStatusOk: boolean;\n error?: Error;\n payload: T|null;\n};\n\nexport type IFetcher = (requestPayload: IFetchRequest, timeout?: number) => PPromise> ;\n\nexport interface ILog {\n milestone: (msg: any) => void,\n verbose: (msg: any) => void,\n trace: (msg: any) => void,\n info: (msg: any) => void,\n warn: (msg: any) => void,\n warning: (msg: any) => void,\n error: (msg: any) => void,\n fatal: (msg: any) => void,\n}\n\nexport interface IQueryURL {\n parse: (queryString: string) => {},\n assemble: (queryArgs: {}) => string,\n}\n\ninterface IUnzipEntry {\n versionMadeBy: number;\n versionNeededToExtract: number;\n generalPurposeBitFlag: number;\n compressionMethod: number;\n lastModTime: number;\n lastModDate: number;\n crc32: number;\n compressedSize: number;\n uncompressedSize: number;\n internalAttributes: number;\n externalAttributes: number;\n localHeaderOffset: number;\n name: string;\n commment: string;\n extraFields: object[];\n}\n\ntype IUnzipReadEntriesCallback = (err: Error, entries: IUnzipEntry[]) => void;\ntype IUnzipReadEntryDataCallback = (err: Error, readStream: IZipReadStream) => void;\n\ninterface IUnzipFile {\n readEntries: (callback: IUnzipReadEntriesCallback) => void;\n readEntryData: (entry: IUnzipEntry, checkCrc: boolean, callback: IUnzipReadEntryDataCallback) => void;\n}\n\ntype IReadStreamCallback = (value: any) => void;\ntype IReadStreamEvent = 'data'|'error'|'end';\n\ninterface IZipReadStream {\n on: (event: IReadStreamEvent, callback: IReadStreamCallback) => void;\n}\n\nexport interface IZip {\n unzipFile: (blobData: Blob, fileName: string) => Promise;\n unzipAll: (blobData: Blob, destDirectoryPrefix: string) => Promise<{ [keyof: string]: T }>;\n listings: (blobData: Blob) => Promise>;\n}\n\nexport interface IKVStorage {\n getItem: (key: any) => Promise;\n setItem: (key: any, value: any) => Promise;\n removeItem: (key: any) => Promise;\n clear: () => Promise;\n length: () => Promise;\n}\n\nexport enum IBrowserPlatform {\n Unknown = 0,\n MobileiOS = 1,\n MobileAndroid = 2,\n}\n\nexport interface IBrowser {\n platform: IBrowserPlatform,\n isMobile: boolean,\n isInstalled: boolean,\n}\n\nexport interface ICache {\n add: (key: string|symbol, value: any) => void;\n get: (key: string|symbol) => any;\n}\n\nexport interface ICacheController {\n getAssociatedCache: (associatedObject: any) => ICache|null;\n getGlobalCache: () => ICache;\n}\n\nexport type LANGUAGE_CODE = \"cs\" | \"de\" | \"en\" | \"es\" | \"fr\" | \"it\" | \"ja\" | \"ko\" | \"pl\" | \"pt\" | \"ru\" | \"zh\" | \"nl\" | \"ar\" | \"bp\" | \"ga\" | \"gd\";\n\nexport interface ITranslationStorage {\n translation: (language: LANGUAGE_CODE, key: string, parameters?: Array, fallback?: string) => string;\n}\n\nconst TYPES = {\n IEnv: Symbol.for(\"IEnv\"),\n IFetch: Symbol.for(\"IFetch\"),\n ILog: Symbol.for(\"ILog\"),\n IQueryURL: Symbol.for(\"IQueryURL\"),\n IZip: Symbol.for(\"IZip\"),\n IKVStorage: Symbol.for(\"IKVStorage\"),\n IBrowser: Symbol.for(\"IBrowser\"),\n ICache: Symbol.for(\"ICache\"),\n ICacheController: Symbol.for(\"ICacheController\"),\n ITranslationStorage: Symbol.for(\"ITranslationStorage\"),\n}\n\n\nexport function injectENV(container: IContainer = injectContainer()): IEnv {\n return container.get(TYPES.IEnv);\n}\n\nexport function bindENV(val: IEnv, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IEnv, val);\n}\n\n\nexport function injectFetch(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IFetch)();\n}\n\nexport function bindFetch(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IFetch, val);\n}\n\n\nexport function injectLog(container: IContainer = injectContainer()): ILog {\n return container.get(TYPES.ILog);\n}\n\nexport function bindLog(val: ILog, container: IContainer = injectContainer()) {\n return container.bind(TYPES.ILog, val);\n}\n\n\nexport function injectQueryURL(container: IContainer = injectContainer()): IQueryURL {\n return container.get(TYPES.IQueryURL);\n}\n\nexport function bindQueryURL(val: IQueryURL, container: IContainer = injectContainer()) {\n return container.bind(TYPES.IQueryURL, val);\n}\n\n\nexport function injectZip(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IZip)();\n}\n\nexport function bindZip(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IZip, val);\n}\n\n\nexport function injectKVStorage(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IKVStorage)();\n}\n\nexport function bindKVStorage(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IKVStorage, val);\n}\n\n\nexport function injectBrowser(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IBrowser)();\n}\n\nexport function bindBrowser(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.IBrowser, val);\n}\n\n\nexport function injectCache(container: IContainer = injectContainer()): ICache {\n return container.get(TYPES.ICache);\n}\n\nexport function bindCache(val: ICache, container: IContainer = injectContainer()) {\n return container.bind(TYPES.ICache, val);\n}\n\n\nexport function injectCacheController(container: IContainer = injectContainer()): ICacheController {\n return container.get(TYPES.ICacheController);\n}\n\nexport function bindCacheController(val: ICacheController, container: IContainer = injectContainer()) {\n return container.bind(TYPES.ICacheController, val);\n}\n\n\nexport function injectTranslationStorage(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.ITranslationStorage)();\n}\n\nexport function bindTranslationStorage(val: ILazyBinder, container: IContainer = injectContainer()) {\n return container.bind>(TYPES.ITranslationStorage, val);\n}\n\n","\n\n\nimport Dexie from 'dexie';\nimport { DexieDBOptions } from './db.if';\nimport dbLoad from '../update';\n\n\nclass DexieDB extends Dexie {\n constructor (options: DexieDBOptions = {}) {\n\n if ( !options.IDBKeyRange ) {\n options.IDBKeyRange = IDBKeyRange;\n }\n\n if ( !options.indexedDB ) {\n options.indexedDB = indexedDB;\n }\n\n const name = options.name ?? \"Workspace-DB\";\n\n super(name, options);\n\n this.version(options.version ?? 1)\n .stores(options.mappings ?? {});\n }\n}\n\nexport default DexieDB;","\n\nfunction serialize(obj: Record<(string|number), (string|number|boolean)>): string {\n let pairings: Array = [];\n\n for ( const key of Object.keys(obj) ) {\n if (obj.hasOwnProperty(key)) {\n const value = obj[key];\n pairings.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(value));\n }\n }\n\n const body = pairings.join(\"&\");\n\n return body;\n}\n\nexport default {\n serialize,\n}","\n\n\nimport { IAuthenticateResponse } from './interface';\nimport { IFetcher, IFetchRequest, Method } from '../../interface/util';\nimport form from './private/form';\n\nfunction _request(apiUrl: string, apiExtension: string, clientId: string, clientSecret: string, grantType: string, username: string, password: string) : IFetchRequest {\n const authParams = {\n 'client_id': clientId,\n 'client_secret': clientSecret,\n 'grant_type': grantType,\n 'username': username,\n 'password': password,\n };\n const req = {\n url: apiUrl + apiExtension,\n method: \"POST\" as Method,\n body: form.serialize(authParams),\n headers: [\n { name:'Content-Type', value: 'application/x-www-form-urlencoded' },\n ]\n };\n return req;\n}\n\n\nfunction authenticate(fetcher: IFetcher, apiUrl: string, apiExtension: string, authParams: { clientId: string, clientSecret: string, grantType: string, username: string, password: string }, timeout: number = (10 * 1000) ) : Promise {\n return new Promise(function(resolve, reject) {\n const req = _request(apiUrl, apiExtension, authParams.clientId, authParams.clientSecret, authParams.grantType, authParams.username, authParams.password);\n fetcher(req, timeout)\n .then(function(response) {\n let error: string|null = null;\n\n if ( response.statusCode === 400 ) {\n error = 'Invalid credentials, authentication failed';\n }\n else if ( !response.isStatusOk ) {\n error = `Authentication failed: ${response.statusCode}`;\n } \n else if ( !response.payload || !(response.payload as IAuthenticateResponse|null)?.access_token ) {\n error = 'Missing access_token in auth response';\n }\n\n if ( error ) {\n reject(error);\n } else {\n const data = response.payload as IAuthenticateResponse; /* already checked for null above */\n resolve(data);\n }\n })\n .catch(function(err: Error) {\n console.error('Authentication failed: ' + JSON.stringify(err));\n reject(err);\n });\n })\n};\n\nexport default authenticate;","\n\n\nimport { injectFetch } from '../../interface/util';\nimport { IAuthManager, IAuthManagerArguments, IAuthManagerStatus } from './auth.if';\nimport auth from '../api/auth';\n\ninterface IAuthManagerPrv extends IAuthManager {\n pendingRenew: Promise|null;\n}\n\nfunction manager(authArguments: IAuthManagerArguments | string): IAuthManager {\n const args: IAuthManagerArguments =\n ((authArguments as IAuthManagerArguments)?.apiUrl != undefined) ?\n authArguments as IAuthManagerArguments :\n JSON.parse(authArguments as string) as IAuthManagerArguments;\n\n /* make sure onCreation #hasExpired() returns true */\n const expirySetDate = new Date();\n expirySetDate.setSeconds(expirySetDate.getSeconds()-4);\n\n const manager: IAuthManagerPrv = {\n pendingRenew: null,\n\n accessToken: '',\n expiry: expirySetDate,\n\n apiUrl: args.apiUrl,\n apiExtension: args.apiExtension,\n clientId: args.clientId,\n clientSecret: args.clientSecret,\n grantType: args.grantType,\n username: args.username,\n password: args.password,\n\n status: function(this: IAuthManagerPrv): IAuthManagerStatus {\n if ( this.accessToken.length <= 1 ) { return \"Unset\"; }\n\n if ( this.hasExpired() ) { return \"Expired\"; }\n\n return \"Authorized\";\n },\n\n hasExpired: function(this: IAuthManagerPrv): boolean {\n const now = (new Date()).getTime();\n const threshold = now - 30; /* if we are within 30s, get a new token */\n const expiry = this.expiry.getTime();\n const hasExpired = expiry < threshold;\n return hasExpired;\n },\n\n renew: function(this: IAuthManagerPrv): Promise {\n const manager = this;\n\n if ( !manager.hasExpired() ) {\n return Promise.resolve(manager.accessToken);\n }\n\n if ( !manager.pendingRenew ) {\n manager.pendingRenew = new Promise(async function(resolve, reject) {\n const fetcher = await injectFetch();\n auth(\n fetcher,\n manager.apiUrl, \n manager.apiExtension,\n {\n clientId: manager.clientId, \n clientSecret: manager.clientSecret, \n grantType: manager.grantType, \n username: manager.username, \n password: manager.password,\n \n })\n .then(function(authResponse) {\n manager.accessToken = authResponse.access_token;\n const expiry = new Date();\n expiry.setSeconds(expiry.getSeconds() + authResponse.expires_in);\n manager.expiry = expiry;\n resolve(authResponse.access_token);\n manager.pendingRenew = null;\n })\n .catch(error => reject(`Authentication failed: ${JSON.stringify(error).substring(0, 30)}`));\n });\n }\n\n return manager.pendingRenew;\n },\n\n serialize: function(this: IAuthManagerPrv): string {\n return JSON.stringify(this);\n }\n };\n\n return manager as IAuthManager;\n}\n\nexport default manager;","\n\nimport PPromise from 'p-progress';\nimport { IFetchRequest, injectFetch, ResponseTypes } from '../../interface/util';\nimport { IConfigAPI, injectConfigAPI } from '../../interface/config';\n\nexport function requestURL(config: IConfigAPI, mediaId: string): string {\n return config.url + config.extension.media.replace('%MEDIAID%', mediaId);\n}\n\nexport function request(config: IConfigAPI, authToken: string, mediaId: string) : IFetchRequest {\n const req: IFetchRequest = {\n url: requestURL(config, mediaId),\n method: 'GET',\n headers: [\n { name:'Authorization', value: `Bearer ${authToken}` },\n { name:'Content-Type', value: 'application/json' },\n ],\n expectedResponseType: \"blob\" as ResponseTypes,\n };\n \n return req;\n}\n\ninterface IMediaResponseType {\n 'blob': Blob,\n 'none': void,\n}\n\nfunction _getMedia(type: K, authToken: string, mediaId: string): PPromise {\n return new PPromise(async function(resolve, reject, progress) {\n try {\n const fetcher = await injectFetch();\n const config = injectConfigAPI();\n\n const promise = fetcher(request(config, authToken, mediaId));\n\n promise\n .onProgress(function(data) {\n progress(data);\n })\n\n const response = await promise;\n\n switch (type) {\n case 'blob':\n const payload = response.payload as Blob;\n const blob = new Blob([payload]);\n resolve(blob as V);\n break;\n\n case 'none':\n resolve();\n break;\n }\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport function getMedia(authToken: string, mediaId: string): PPromise {\n return _getMedia('blob', authToken, mediaId);\n}\n\nexport function getMediaNoResponse(authToken: string, mediaId: string): PPromise {\n return _getMedia('none', authToken, mediaId);\n}\n\nconst exports = {\n getMedia,\n getMediaNoResponse,\n}\n\nexport default exports","import { IConfigAPI, IConfigCache, IConfigCacheName } from '../../interface/config';\nimport { IMediaManager } from '../../interface/media';\nimport { IAuthManager } from './auth.if';\nimport { getMedia, requestURL as getMediaURL } from '../../private/api/media';\nimport { IWorkspaceDB } from '../../interface/db';\nimport type ILanguageDto from '../../model/LanguageDto.if';\nimport IMediumDto from '../../model/MediumDto.if';\n\ninterface IMediaManagerPrv extends IMediaManager {\n\n}\n\nfunction _cache(config: IConfigCache): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n if ( window.caches === undefined ) {\n reject('No caches available');\n return;\n }\n\n const cacheName = config[IConfigCacheName.WorkspaceMedia].cacheName;\n\n const cache = await caches.open(cacheName);\n\n resolve(cache);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _cachedResult(mediaId: string, configAPI: IConfigAPI, configCache: IConfigCache, cache?: Cache): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n if ( !cache ) {\n cache = await _cache(configCache);\n }\n\n const expectedUrl = configAPI.url + configAPI.extension.media.replace('%MEDIAID%', mediaId);\n\n const request = new Request(expectedUrl);\n const response = await cache.match(request, {\n ignoreMethod: true,\n ignoreSearch: true,\n })\n\n const blob = response ? await response.blob() : undefined;\n\n if ( blob ) {\n resolve(blob);\n } else {\n reject(`Unable to find id: ${mediaId} in cache`);\n }\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _downloadLink(mediaId: string, configAPI: IConfigAPI): string {\n return getMediaURL(configAPI, mediaId)\n}\n\nfunction _downloadLinks(mediaIds: Array, configAPI: IConfigAPI): Array {\n return mediaIds.map(id => _downloadLink(id, configAPI));\n}\n\nfunction _downloadToBlob(mediaId: string, cacheOnly: boolean, database: IWorkspaceDB, auth: IAuthManager, configAPI: IConfigAPI, configCache: IConfigCache): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n await database.open();\n\n /* do this first, as if it doesn't exist, lets crash out early before network requests */\n const medium = await database.medium().get(mediaId);\n let blob: Blob|null;\n\n if ( cacheOnly ) {\n blob = await _cachedResult(mediaId, configAPI, configCache);\n } else {\n const token = auth.hasExpired() ? await auth.renew() : auth.accessToken;\n \n const mediaBlob = await getMedia(token, mediaId);\n\n /* make sure to specify the mime-type in the blob, otherwise media such as mp3/mp4's won't play on Safari */\n blob = new Blob([mediaBlob], { type: medium.mimeType });\n }\n\n database.close();\n\n resolve(blob);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _downloadToBlobs(mediaIds: Array, cacheOnly: boolean, database: IWorkspaceDB, auth: IAuthManager, configAPI: IConfigAPI, configCache: IConfigCache): Promise> {\n return new Promise(async function(resolve, reject) {\n try {\n const promises = mediaIds.map(id => _downloadToBlob(id, cacheOnly, database, auth, configAPI, configCache));\n\n const results = Promise.all(promises);\n \n resolve(results); \n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _downloadToUrl(mediaId: string, cacheOnly: boolean, database: IWorkspaceDB, auth: IAuthManager, configAPI: IConfigAPI, configCache: IConfigCache): Promise {\n return new Promise(function(resolve, reject) {\n _downloadToBlob(mediaId, cacheOnly, database, auth, configAPI, configCache)\n .then(blob => {\n const url = URL.createObjectURL(blob);\n resolve(url);\n })\n .catch(error => reject(error));\n });\n}\n\nfunction _downloadToUrls(mediaIds: Array, cacheOnly: boolean, database: IWorkspaceDB, auth: IAuthManager, configAPI: IConfigAPI, configCache: IConfigCache): Promise> {\n return new Promise(function(resolve, reject) {\n _downloadToBlobs(mediaIds, cacheOnly, database, auth, configAPI, configCache)\n .then(blobs => {\n const urls = blobs.map(blob => URL.createObjectURL(blob));\n resolve(urls);\n })\n .catch(error => reject(error));\n });\n}\n\nfunction _isAllCached(mediaIds: Array, configAPI: IConfigAPI, configCache: IConfigCache): Promise {\n return new Promise(function(resolve, reject) {\n _cache(configCache)\n .then(cache => {\n return Promise.all(mediaIds.map(mediaId => _cachedResult(mediaId, configAPI, configCache, cache)))\n })\n .then(_ => resolve(true))\n .catch(error => resolve(false));\n });\n}\n\nfunction _mediaUsedForLanguage(db: IWorkspaceDB, language: ILanguageDto): Promise> {\n return new Promise(async function(resolve, reject) {\n try {\n const shouldOpenClose = !db.isOpen();\n\n if (shouldOpenClose) {\n await db.open();\n }\n\n /* get a list of all media associated with SiteObjectTranslations & filter these by #language */\n const allSiteObjectTranslations = await db.siteObjectTranslation().all();\n const allMediaWithTranslations = allSiteObjectTranslations.filter(sot => (sot.mediumId)); /* if the mediumId is blank, ignore */\n const matchMediaTranslations = \n await Promise.all(allMediaWithTranslations\n .filter(sot => sot.languageId === language.id)\n .map(sot => db.medium().get(sot.mediumId))) /* filter all SOTs with valid mediumId, where language matches & pull sot.mediumId from db */\n\n /* any media without an associated translation, treat as if it is universal (needed on all languages) & download regardless */\n const allMedia = await db.medium().all();\n const allMediaWithTranslationsIds = allMediaWithTranslations.map(m => m.mediumId);\n const mediaUniversal = allMedia.filter(medium => !allMediaWithTranslationsIds.includes(medium.id));\n\n if (shouldOpenClose) {\n db.close();\n }\n\n /* generate Mapping, so as to remove any duplicates */\n let downloadMedia: Record = {};\n\n mediaUniversal.forEach(medium => downloadMedia[medium.id] = medium);\n matchMediaTranslations.forEach(medium => downloadMedia[medium.id] = medium);\n\n const downloadList = Object.values(downloadMedia)\n\n resolve(downloadList);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction MediaManager(db: IWorkspaceDB, auth: IAuthManager, configAPI: IConfigAPI, configCache: IConfigCache): IMediaManager {\n const manager: IMediaManagerPrv = {\n downloadLink: (mediaId: string) => _downloadLink(mediaId, configAPI),\n downloadLinks: (mediaIds: Array) => _downloadLinks(mediaIds, configAPI),\n\n downloadToURL: (id: string, cacheOnly?: boolean) => _downloadToUrl(id, cacheOnly ?? false, db, auth, configAPI, configCache),\n downloadToURLs: (ids: Array, cacheOnly?: boolean) => _downloadToUrls(ids, cacheOnly ?? false, db, auth, configAPI, configCache),\n\n downloadToBlob: (id: string, cacheOnly?: boolean) => _downloadToBlob(id, cacheOnly ?? false, db, auth, configAPI, configCache),\n downloadToBlobs: (ids: Array, cacheOnly?: boolean) => _downloadToBlobs(ids, cacheOnly ?? false, db, auth, configAPI, configCache),\n\n isMediumCached: (mediaId: string) => _isAllCached([mediaId], configAPI, configCache),\n isAllMediaCached: (mediaIds: Array) => _isAllCached(mediaIds, configAPI, configCache),\n\n mediaForLanguage: (language: ILanguageDto) => _mediaUsedForLanguage(db, language),\n }\n return manager as IMediaManager;\n}\n\nexport default MediaManager\n","\n\nimport PPromise from 'p-progress';\nimport { IAuthenticationManager } from \"../../interface/authentication\";\nimport IMediumDto from \"../../model/MediumDto.if\";\nimport { getMedia, getMediaNoResponse } from '../api/media';\n\n\nexport function downloadAll(media: Array, auth: IAuthenticationManager): PPromise {\n return new PPromise(async function(resolve, reject, progress) {\n try {\n const accessToken = await auth.renew();\n let fetchError: string|null = null;\n\n progress(0.01);\n\n const totalBytesToDownload = media.reduce((total: number, medium: IMediumDto) => (total + medium.mediumSize), 0);\n\n let progressUptoThisFetch = 0; /* as we loop through keep a running counter of all weightings up to this point */\n\n /* download each fetch in order sequentially */\n for ( let idx = 0; idx < media.length; idx++ ) {\n const medium = media[idx];\n /* how much is this request worth overall to the progress */\n const progressWeighting = medium.mediumSize/totalBytesToDownload;\n const fetch = getMediaNoResponse(accessToken, medium.id)\n .onProgress(progressNow => {\n const progressCb = progressUptoThisFetch + (progressNow * progressWeighting);\n progress(Math.max(Math.min(progressCb, 1.0), 0.0));\n });\n\n try {\n await fetch;\n } catch (error) {\n console.error(`Download all media failed: ${JSON.stringify(error)}`);\n fetchError = `${error}`;\n break;\n }\n\n progressUptoThisFetch += progressWeighting;\n }\n\n fetchError ?\n reject(fetchError):\n resolve();\n } catch (error) {\n reject(error);\n }\n })\n}\n\nexport function downloadMedium(auth: IAuthenticationManager, medium: string|IMediumDto): Promise {\n const mediumId: string =\n ((medium as IMediumDto)?.id != undefined) ?\n String((medium as IMediumDto).id ?? -1) :\n String(medium);\n\n return new Promise(async function(resolve, reject) {\n try {\n const accessToken = await auth.renew();\n\n const blob = getMedia(accessToken, mediumId);\n\n resolve(blob);\n } catch (error) {\n reject(error);\n }\n })\n};\n\nconst exports = {\n downloadAll,\n downloadMedium,\n}\n\nexport default exports;\n","\n\n\nimport { IFetchRequest, injectFetch, Method, ResponseTypes } from '../../interface/util';\nimport { injectConfigAPI } from '../../interface/config';\nimport { IMediumDiffRequestStatus, IMediaDiffResponse } from './interface';\n\ninterface IMediaDiffRequest {\n requestDto: {\n siteId: number,\n hash: string,\n requests: Array<{id:string, mediumHash: string}>\n };\n}\n\nfunction _request(apiUrl: string, extension: string, authToken: string, siteId: number, siteHash: string = \"\", existingMedia: Array = []) : IFetchRequest {\n const mapMediumToBodyRequest = (medium: IMediumDiffRequestStatus): {id:string, mediumHash:string} => ({\n id: medium.id,\n mediumHash: medium.mediumHash\n })\n\n const body: IMediaDiffRequest = {\n requestDto: {\n siteId,\n hash: siteHash,\n requests: existingMedia.map(medium => mapMediumToBodyRequest(medium)),\n }\n }\n\n const req: IFetchRequest = {\n url: apiUrl + extension,\n method: 'POST' as Method,\n headers: [\n { name:'Authorization', value: `Bearer ${authToken}` },\n { name:'Content-Type', value: 'application/json' },\n ],\n body: JSON.stringify(body),\n expectedResponseType: 'json' as ResponseTypes,\n };\n\n return req;\n}\n\nfunction getMediaDiff(authToken: string, siteId: number, siteHash: string = \"\", existingMedia: Array = []) : Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const fetcher = await injectFetch();\n const config = injectConfigAPI();\n\n const req = _request(authToken, config.url, config.extension.mediaDiff, siteId, siteHash, existingMedia);\n \n const response = await fetcher(req);\n\n resolve(response.payload as IMediaDiffResponse);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport default getMediaDiff;\n","\n\n\nimport PPromise from 'p-progress';\nimport { ISiteData } from './interface';\nimport { IZip, IFetcher, IFetchRequest, Method, ResponseTypes, IFetchResponse, injectFetch, injectZip } from '../../interface/util';\n\nfunction _request(apiUrl: string, apiExtension: string, authToken: string, hash: string) : IFetchRequest {\n const req = {\n url: apiUrl + apiExtension,\n method: 'POST' as Method,\n headers: [\n { name:'Authorization', value: `Bearer ${authToken}` },\n { name:'Content-Type', value: 'application/json' },\n ],\n body: JSON.stringify({'hash':hash}),\n expectedResponseType: 'blob' as ResponseTypes,\n };\n return req;\n}\n\nfunction _downloadSiteData(fetcher: IFetcher, apiUrl: string, apiExtension: string, authToken: string, hash: string = \"\", timeout = (20 * 10000)): PPromise {\n return new PPromise(function(resolve, reject, progress) {\n const req = _request(apiUrl, apiExtension, authToken, hash);\n const promise = fetcher(req, timeout)\n promise.onProgress(function(data) {\n progress(data)\n })\n promise.then(function(response: IFetchResponse) {\n if ( !response.payload ) {\n reject('Missing payload from response');\n }\n\n const blob = new Blob([response.payload as Blob]);\n\n resolve(blob)\n })\n .catch(function(err) {\n reject(err);\n })\n });\n}\n\nfunction _unzipSiteData(zip: IZip, blob: Blob): PPromise {\n return new PPromise(function(resolve, reject, progress) {\n zip.unzipFile(blob, 'data.json')\n .then(function(dataStr) {\n progress(1.0);\n const jsonData = JSON.parse(dataStr) as ISiteData;\n resolve(jsonData);\n })\n .catch(function(err) {\n reject(err);\n });\n });\n}\n\nfunction getSiteData(apiUrl: string, apiExtension: string, authToken: string, hash: string = \"\", timeout= (20 * 10000)): PPromise {\n \n return new PPromise(async function(resolve, reject, progress) {\n const fetcher = await injectFetch();\n const zip = await injectZip();\n \n const promise = _downloadSiteData(fetcher, apiUrl, apiExtension, authToken, hash, timeout)\n\n promise.onProgress(function(data) {\n progress(data/2); /* 2 Jobs */ \n })\n\n promise\n .then(blob => _unzipSiteData(zip, blob))\n .then(sitedata => resolve(sitedata))\n .catch(err => reject(err));\n });\n}\n\nexport default getSiteData;","\n\n\n\nimport authenticate from './auth';\nimport media from './media';\nimport mediaDiff from './mediaDiff';\nimport siteData from './siteData';\n\nexport default {\n authenticate,\n media,\n mediaDiff,\n siteData,\n}\n","\n\n\n\nimport { IPatchItem } from './interface';\n\nfunction apply(patchData: Array, source: Object={}): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const jsonpatch = await import('fast-json-patch');\n const validatePatch = true;\n const mutateDocument = false;\n const result = jsonpatch.applyPatch(source, patchData as any, validatePatch, mutateDocument).newDocument;\n resolve(result);\n } catch (error) {\n console.error(`Failed to patch: ${JSON.stringify(error)}`);\n reject(error);\n }\n });\n}\n\nexport default apply;\n","\n\n\nimport DexieDB from '../db/private/db';\nimport { IPatchItem, IPatchStorage, IPatchStorageOptions } from './interface';\n\nconst TABLE_NAME = \"IPatchStorage\";\nconst TABLE_MAPPINGS = \"name, hash, data\";\n\nfunction _db(options: IPatchStorageOptions = {}): DexieDB {\n const db = new DexieDB({\n version: 1,\n mappings: {\n [TABLE_NAME]: TABLE_MAPPINGS,\n },\n name: options.name ?? TABLE_NAME,\n indexedDB: options.indexedDB,\n IDBKeyRange: options.IDBKeyRange,\n })\n\n return db;\n}\n\nfunction load(name: string, options: IPatchStorageOptions = {}): Promise {\n return new Promise(async function(resolve, reject) {\n const db = _db(options);\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n\n const result: IPatchStorage = await table.get(name);\n\n db.close();\n\n result ?\n resolve(result) :\n reject('Unable to find patch-storage named: ' + name)\n });\n}\n\nfunction save(data: IPatchStorage, options: IPatchStorageOptions = {}): Promise {\n return new Promise(async function(resolve, reject) {\n const db = _db(options);\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n\n const result = await table.put(data);\n\n db.close();\n\n ( result === data.name ) ?\n resolve() :\n reject('Failed to save data into patch-storage table');\n });\n}\n\nfunction remove(name: string, options: IPatchStorageOptions = {}): Promise {\n return new Promise(async function(resolve, reject) {\n const db = _db(options);\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n\n await table.delete(name);\n\n db.close();\n\n resolve();\n });\n}\n\nexport default {\n load,\n save,\n remove,\n}","\n\n\nimport apply from './apply';\nimport { IPatch } from './interface';\nimport storage from './storage';\n\nconst exports: IPatch = {\n apply,\n storage,\n};\n\nexport default exports\n\n","\n\n\ninterface IMAPPING {\n [Key: string]: Array;\n}\n\nconst ENTITY_MAPPING: IMAPPING = {\n 'BackgroundModeDto': ['backgroundmodes', 'backgroundmode', 'backgroundmodedto'],\n 'BeaconDto': ['beacons', 'beacon', 'beacondto'] ,\n 'BeaconSensitivityDto': ['beaconsensitivities', 'beaconsensitivity', 'beaconsensitivitydto'],\n 'FloorPlanDto': ['floorplans', 'floorplan', 'floorplandto'],\n 'FontAlignmentDto': ['fontalignments', 'fontalignment', 'fontalignmentdto'],\n 'FontFamilyDto': ['fontfamilies', 'fontfamily', 'fontfamilydto'],\n 'FontSizeUnitDto': ['fontsizeunits', 'fontsizeunit', 'fontsizeunitdto'],\n 'FontStyleDto': ['fontstyles', 'fontstyle', 'fontstyledto'],\n 'LanguageDto': ['languages', 'language', 'languagedto'],\n 'MediumDto': ['media', 'medium', 'mediumdto'],\n 'MenuItemDto': ['menuitems', 'menuitem', 'menuitemdti'],\n 'MenuItemTranslationDto': ['menuitemtranslations', 'menuitemtranslation', 'menuitemtranslationdto'],\n 'PinTypeDto': ['pintypes', 'pintype', 'pintypedto'],\n 'ScreenOrientationDto': ['screenorientations', 'screenorientation', 'screenorientationdto'],\n 'SiteDto': ['sites', 'site', 'sitedto'],\n 'SiteObjectOnFloorPlanDto': ['siteobjectonfloorplans', 'siteobjectonfloorplan', 'siteobjectonfloorplandto'],\n 'SiteObjectDto': ['siteobjects', 'siteobject', 'siteobjectdto'],\n 'SiteObjectTranslationDto': ['siteobjecttranslations', 'siteobjecttranslation', 'siteobjecttranslationdto'],\n 'SiteObjectTypeDto': ['siteobjecttypes', 'siteobjecttype', 'siteobjecttypedto'],\n 'SiteSupportedLanguageDto': ['sitesupportedlanguages', 'sitesupportedlanguage', 'sitesupportedlanguagedto'],\n 'StyleDto': ['styles', 'style', 'styledto'],\n 'TourMenuItemDto': ['tourmenuitems', 'tourmenuitem', 'tourmenuitemdto'],\n 'TourRelatedSiteObjectDto': ['tourrelatedsiteobjects', 'tourrelatedsiteobject', 'tourrelatedsiteobjectdto'],\n 'TourDto': ['tours', 'tour', 'tourdto'],\n 'TourStatusDto': ['tourstatuses', 'tourstatus', 'tourstatusdto'],\n 'TourSubTypeDto': ['toursubtypes', 'toursubtype', 'toursubtypedto'],\n 'TourSupportedLanguageDto': ['toursupportedlanguages', 'toursupportedlanguage', 'toursupportedlanguagedto'],\n 'TourTranslationDto': ['tourtranslations', 'tourtranslation', 'tourtranslationdto'],\n 'TourTypeDto': ['tourtypes', 'tourtype', 'tourtypedto'],\n}\n\nfunction entityNameFromPatchPath(path: string) : string|null {\n const pathCompare = path.toLowerCase();\n\n for ( const entityname of Object.keys(ENTITY_MAPPING) ) {\n const mapped = ENTITY_MAPPING[entityname];\n for ( const mapName of mapped ) {\n if ( mapName === pathCompare ) {\n return entityname;\n }\n }\n }\n\n return null;\n}\n\nfunction patchPathFromEntityName(entityName: string) : string|null {\n const mapArray = ENTITY_MAPPING[entityName];\n return Array.isArray(mapArray) ? mapArray[0] : null;\n}\n\nfunction tableNameFromInterfaceName(interfaceName: string): string {\n return interfaceName;\n}\n\nfunction interfaceNameFromEntityName(entityName: string): string {\n return 'I' + entityName;\n}\n\nfunction entityNameFromInterfaceName(interfaceName: string): string {\n return interfaceName.substring(1);\n}\n\nfunction tableNameFromEntityName(interfaceName: string): string {\n return tableNameFromInterfaceName(interfaceNameFromEntityName(interfaceName));\n}\n\nfunction entityNameFromTableName(tableName: string): string {\n return entityNameFromInterfaceName(tableName);\n}\n\nexport default {\n mappings: ENTITY_MAPPING,\n entityNameFromPatchPath,\n patchPathFromEntityName,\n tableNameFromInterfaceName,\n interfaceNameFromEntityName,\n entityNameFromInterfaceName,\n tableNameFromEntityName,\n entityNameFromTableName,\n};\n","\n\n\n\nimport PProgress from 'p-progress';\nimport { IWorkspaceDB } from '../../interface/db';\nimport IBaseDto from '../../model/private/IBaseDto';\n\nimport sitePatchMap from './private/sitePatchMap';\n\nfunction _promise(db: IWorkspaceDB, patchPath: string, items: [IBaseDto]): Promise {\n if ( patchPath === 'hash') { return Promise.resolve(); }\n\n const entityName = sitePatchMap.entityNameFromPatchPath(patchPath) ?? patchPath;\n const interfaceName = sitePatchMap.interfaceNameFromEntityName(entityName);\n const tableName = sitePatchMap.tableNameFromInterfaceName(interfaceName);\n\n let promise = Promise.resolve();\n\n if ( tableName ) {\n promise = db.getTable(tableName).bulkAddOrUpdate(items);\n } else {\n console.error(`Unable to find table name for entity: ${patchPath}`);\n }\n\n return promise;\n}\n\nfunction update(db: IWorkspaceDB, source: Record = {}): PProgress {\n return new PProgress(async function(resolve, reject, progress) {\n try {\n const patchPaths = Object.keys(source);\n const progressPerPath = 1.0 / patchPaths.length;\n\n for ( let i=0; i, zipper: Promise, db: IWorkspaceDB, auth: IAuthenticationManager, name: string): PPromise {\n const configAPI = injectConfigAPI();\n\n return new PPromise(async function(resolve, reject, progress) {\n try {\n const zip = await zipper;\n await db.open();\n\n progress(0.1);\n\n const token = await auth.renew();\n\n progress(0.2);\n \n let existingPatch: IPatchStorage|null = null;\n\n try {\n existingPatch = await patch.storage.load(name);\n } catch (error) {\n\n }\n\n progress(0.3);\n\n if ( !existingPatch ) {\n existingPatch = {\n name: name,\n hash: \"\",\n data: {},\n };\n }\n \n const siteFetcher = api.siteData(configAPI.url, configAPI.extension.siteData, token, existingPatch.hash);\n\n siteFetcher.onProgress(function(data) {\n progress(0.3 + (data * 0.3));\n });\n\n progress(0.6);\n \n const siteResponse = await siteFetcher;\n\n /* only bother if there is something in the patch */\n if ( siteResponse.patch.length > 0 ) {\n let newPatch: IPatchStorage = {...existingPatch};\n newPatch.data = await patch.apply(siteResponse.patch, existingPatch.data);\n newPatch.hash = siteResponse.currentHash;\n \n await patch.storage.save(newPatch);\n \n await load(db, newPatch.data);\n }\n\n progress(0.8);\n \n db.close();\n\n resolve();\n } catch (error) {\n reject(error);\n }\n })\n}\n\nexport default update;","import { IAuthenticationManager } from '../../interface/authentication';\nimport { IWorkspaceDB } from '../../interface/db';\nimport { IOperationManager } from '../../interface/operation';\nimport { downloadAll } from '../operation/downloadmedia';\nimport updateSite from '../operation/updatesite';\nimport { injectFetch, injectZip } from '../../interface/util';\nimport PPromise from 'p-progress';\nimport IMediumDto from '../../model/MediumDto.if';\nimport ILanguageDto from '../../model/LanguageDto.if';\nimport { IMediaManager } from '../../interface/media';\nimport { filterAsync } from '../../util/array';\nimport { invertResult } from '../../util/promise';\n\ninterface IOperationManagerPrv extends IOperationManager {\n\n}\n\nfunction _opUpdateSite(auth: IAuthenticationManager, db: IWorkspaceDB, name: string): PPromise {\n const zip = injectZip();\n const fetcher = injectFetch();\n\n return updateSite(fetcher, zip, db, auth, name);\n}\n\nfunction _opDownloadMedia(auth: IAuthenticationManager, db: IWorkspaceDB, media: Array): PPromise {\n return new PPromise(async function(resolve, reject, progress) {\n try {\n const shouldOpenClose = !db.isOpen();\n\n if (shouldOpenClose) {\n await db.open();\n }\n\n const promise = downloadAll(media, auth);\n promise.onProgress(function(data) {\n progress(data);\n });\n\n await promise;\n\n if (shouldOpenClose) {\n db.close();\n }\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _opGetAllMedia(db: IWorkspaceDB): Promise> {\n return new Promise(async function(resolve, reject) {\n try {\n const shouldOpenClose = !db.isOpen();\n\n if (shouldOpenClose) {\n await db.open();\n }\n const allMedia = await db.medium().all();\n\n if (shouldOpenClose) {\n db.close();\n }\n\n resolve(allMedia);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction Operation(auth: IAuthenticationManager, media: IMediaManager, db: IWorkspaceDB, name: string): IOperationManager {\n const manager: IOperationManagerPrv = {\n updateSite: () => _opUpdateSite(auth, db, name),\n downloadAllMediaAllLanguages: () => {\n return new PPromise(function(resolve, reject, progress) {\n _opGetAllMedia(db)\n .then(allMedia => {\n const promise = _opDownloadMedia(auth, db, allMedia);\n promise.onProgress(progressPC => progress(progressPC));\n return promise;\n })\n .then(() => resolve())\n .catch(error => reject(`Failed to download media: ${error}`));\n });\n },\n downloadAllMediaInLanguage: (language: ILanguageDto) => {\n return new PPromise(function(resolve, reject, progress) {\n media.mediaForLanguage(language)\n .then(allMedia => filterAsync(allMedia, medium => invertResult(media.isMediumCached(medium.id))) )\n .then(uncachedMedia => {\n const promise = _opDownloadMedia(auth, db, uncachedMedia);\n promise.onProgress(progressPC => progress(progressPC));\n return promise;\n })\n .then(() => resolve())\n .catch(error => reject(`Failed to download media: ${error}`));\n });\n },\n downloadMedia: (media: Array) => _opDownloadMedia(auth, db, media),\n };\n\n return manager as IOperationManager;\n}\n\nexport default Operation;\n","\nexport function filterAsync(arr: T[], promiser: (val: T) => Promise): Promise {\n const arrayOrig = arr;\n\n return new Promise(async function(resolve, reject) {\n try {\n const newArray: T[] = [];\n\n for ( let idx=0; idx): Promise {\n const origPromise = promise;\n\n return new Promise(function(resolve, reject) {\n origPromise\n .then(val => resolve(!val))\n .catch(error => reject(error));\n });\n}\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ICountryDto from \"./CountryDto.if\";\nimport mappings from \"./CountryDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'namePropagation',\n 'externalName' : 'namePropagation',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'imageFileName',\n 'externalName' : 'imageFileName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'removeImage',\n 'externalName' : 'removeImage',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'imageMediumId',\n 'externalName' : 'imageMediumId',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'toursCount',\n 'externalName' : 'toursCount',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'publishedToursCount',\n 'externalName' : 'publishedToursCount',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'deleted',\n 'externalName' : 'deleted',\n 'defaultValue' : false,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IMenuItemDto from \"./MenuItemDto.if\";\nimport mappings from \"./MenuItemDto.map\";\nimport IMediumDto from \"./MediumDto.if\";\nimport MediumDto from \"./MediumDto\";\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from \"./SiteDto\";\n\nimport { IModelSource } from \"./private/db.if\";\nimport Transformers from './private/transformer';\nimport DBUtil from './private/db.util';\n\nfunction _image(this: IMenuItemDto, db: IModelSource): Promise {\n return DBUtil.loadMediumId(db, this.imageMediumId, MediumDto);\n}\n\nfunction _site(this: IMenuItemDto, db: IModelSource): Promise {\n return DBUtil.loadSiteId(db, this.siteId, SiteDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.image = _image;\n obj.site = _site;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'menuItemId',\n 'externalName' : 'menuItemId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'languageId',\n 'externalName' : 'languageId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'deleted',\n 'externalName' : 'deleted',\n 'defaultValue' : false,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IMenuItemTranslationDto from \"./MenuItemTranslationDto.if\";\nimport mappings from \"./MenuItemTranslationDto.map\";\nimport ILanguageDto from \"./LanguageDto.if\";\nimport LanguageDto from \"./LanguageDto\";\nimport IMenuItemDto from \"./MenuItemDto.if\";\nimport MenuItemDto from \"./MenuItemDto\";\n\nimport Transformers from './private/transformer';\nimport DBUtil from './private/db.util';\nimport { IModelSource } from \"./private/db.if\";\n\nfunction _language(this: IMenuItemTranslationDto, db: IModelSource): Promise {\n return DBUtil.loadLanguageId(db, this.languageId, LanguageDto);\n}\nfunction _menuItem(this: IMenuItemTranslationDto, db: IModelSource): Promise {\n return DBUtil.loadMenuItemId(db, this.menuItemId, MenuItemDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.language = _language;\n obj.menuItem = _menuItem;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'isTag',\n 'externalName' : 'isTag',\n 'defaultValue' : false,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ISiteObjectKeywordDto from \"./SiteObjectKeywordDto.if\";\nimport mappings from \"./SiteObjectKeywordDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'fontColor',\n 'externalName' : 'fontColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'fontSize',\n 'externalName' : 'fontSize',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'fontName',\n 'externalName' : 'fontName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'backgroundColor',\n 'externalName' : 'backgroundColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'foregroundColor',\n 'externalName' : 'foregroundColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'description',\n 'externalName' : 'description',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourTypeId',\n 'externalName' : 'tourTypeId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourSubTypeId',\n 'externalName' : 'tourSubTypeId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'styleId',\n 'externalName' : 'styleId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourStatusId',\n 'externalName' : 'tourStatusId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'stage1',\n 'externalName' : 'stage1',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'stage2',\n 'externalName' : 'stage2',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'stage3',\n 'externalName' : 'stage3',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'stage4',\n 'externalName' : 'stage4',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'createdById',\n 'externalName' : 'createdById',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'modifiedById',\n 'externalName' : 'modifiedById',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'version',\n 'externalName' : 'version',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'minorVersion',\n 'externalName' : 'minorVersion',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'publishedVersion',\n 'externalName' : 'publishedVersion',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'testVersion',\n 'externalName' : 'testVersion',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ITourTypeDto from \"./TourTypeDto.if\";\nimport mappings from \"./TourTypeDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'tourTypeId',\n 'externalName' : 'tourTypeId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ITourSubTypeDto from \"./TourSubTypeDto.if\";\nimport mappings from \"./TourSubTypeDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ITourStatusDto from \"./TourStatusDto.if\";\nimport mappings from \"./TourStatusDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'siteSupportedLanguageId',\n 'externalName' : 'siteSupportedLanguageId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourId',\n 'externalName' : 'tourId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\nimport ITourSupportedLanguageDto from \"./TourSupportedLanguageDto.if\";\nimport mappings from \"./TourSupportedLanguageDto.map\";\n\nimport Transformers from './private/transformer';\nimport { IModelSource } from \"./private/db.if\";\nimport DBUtils from './private/db.util';\n\nimport ISiteSupportedLanguageDto from \"./SiteSupportedLanguageDto.if\";\nimport SiteSupportedLanguageDto from \"./SiteSupportedLanguageDto\";\nimport ITourDto from \"./TourDto.if\";\nimport TourDto from \"./TourDto\";\n\n\nfunction _siteSupportedLanguage(this: ITourSupportedLanguageDto, db: IModelSource): Promise {\n return DBUtils.loadSiteSupportedLanguageId(db, this.siteSupportedLanguageId, SiteSupportedLanguageDto);\n}\n\nfunction _tour(this: ITourSupportedLanguageDto, db: IModelSource): Promise {\n return DBUtils.loadTourId(db, this.tourId, TourDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.siteSupportedLanguage = _siteSupportedLanguage;\n obj.tour = _tour;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'tourSupportedLanguageId',\n 'externalName' : 'tourSupportedLanguageId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'completed',\n 'externalName' : 'completed',\n 'defaultValue' : false,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\nimport ITourTranslationDto from \"./TourTranslationDto.if\";\nimport mappings from \"./TourTranslationDto.map\";\n\nimport Transformers from './private/transformer';\nimport { IModelSource } from \"./private/db.if\";\nimport DBUtils from './private/db.util';\n\nimport ITourSupportedLanguageDto from \"./TourSupportedLanguageDto.if\";\nimport TourSupportedLanguageDto from \"./TourSupportedLanguageDto\";\n\n\nfunction _tourSupportedLanguage(this: ITourTranslationDto, db: IModelSource): Promise {\n return DBUtils.loadTourSupportedLanguage(db, this.tourSupportedLanguageId, TourSupportedLanguageDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.tourSupportedLanguage = _tourSupportedLanguage;\n\n return obj;\n}\n\n","\n\n\n\nimport ITourDto from \"./TourDto.if\";\nimport mappings from \"./TourDto.map\";\n\nimport Transformers from './private/transformer';\nimport DBUtils from './private/db.util';\nimport { IModelSource } from \"./private/db.if\";\n\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from \"./SiteDto\";\nimport ITourTypeDto from \"./TourTypeDto.if\";\nimport TourTypeDto from \"./TourTypeDto\";\nimport ITourSubTypeDto from \"./TourSubTypeDto.if\";\nimport TourSubTypeDto from \"./TourSubTypeDto\";\nimport ITourStatusDto from \"./TourStatusDto.if\";\nimport TourStatusDto from \"./TourStatusDto\";\nimport IStyleDto from \"./StyleDto.if\";\nimport StyleDto from \"./StyleDto\";\nimport ITourSupportedLanguageDto from \"./TourSupportedLanguageDto.if\";\nimport TourSupportedLanguageDto from './TourSupportedLanguageDto';\nimport ITourTranslationDto from \"./TourTranslationDto.if\";\nimport TourTranslationDto from './TourTranslationDto';\nimport ISiteSupportedLanguageDto from \"./SiteSupportedLanguageDto.if\";\nimport SiteSupportedLanguageDto from './SiteSupportedLanguageDto';\nimport ILanguageDto from \"./LanguageDto.if\";\n\n\nfunction _site(this: ITourDto, db: IModelSource): Promise {\n return DBUtils.loadSiteId(db, this.siteId, SiteDto);\n}\n\nfunction _tourType(this: ITourDto, db: IModelSource): Promise {\n return DBUtils.loadTourTypeId(db, this.tourTypeId, TourTypeDto);\n}\n\nfunction _tourSubType(this: ITourDto, db: IModelSource): Promise {\n return DBUtils.loadTourSubTypeId(db, this.tourSubTypeId, TourSubTypeDto);\n}\n\nfunction _style(this: ITourDto, db: IModelSource): Promise {\n return DBUtils.loadStyleId(db, this.styleId, StyleDto);\n}\n\nfunction _tourStatus(this: ITourDto, db: IModelSource): Promise {\n return DBUtils.loadTourStatusId(db, this.tourStatusId, TourStatusDto);\n}\n\nfunction _tourSupportedLanguages(this: ITourDto, db: IModelSource): Promise> {\n const self = this;\n\n return new Promise(function(resolve, reject) {\n DBUtils.allTourSupportedLanguages(db, TourSupportedLanguageDto)\n .then(function(allTourSupportedLanguages) {\n const match = allTourSupportedLanguages.filter(x => x.tourId === self.id);\n resolve(match);\n })\n .catch(error => reject(error));\n });\n}\n\nfunction _translations(this: ITourDto, db: IModelSource): Promise> {\n const self = this;\n\n return new Promise(async function(resolve, reject) {\n try {\n const matchTSL = await self.tourSupportedLanguages(db);\n const matchTSLIds = matchTSL.map(x => x.id);\n const allTranslations = await DBUtils.allTourTranslations(db, TourTranslationDto);\n const matchTranslations = allTranslations.filter(x => matchTSLIds.includes(x.tourSupportedLanguageId));\n\n resolve(matchTranslations);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _translation(this: ITourDto, db: IModelSource, language: ILanguageDto|Number): Promise {\n const self = this;\n\n const languageId: Number = \n ((language as ILanguageDto)?.id != undefined) ?\n Number((language as ILanguageDto).id ?? -1) :\n Number(language);\n\n return new Promise(async function(resolve, reject) {\n try {\n const allSSL = await DBUtils.allSiteSupportedLanguages(db, SiteSupportedLanguageDto);\n const matchSSL = allSSL.filter(x => x.languageId === languageId);\n const matchSSLIds = matchSSL.map(x => x.id);\n const allTSL = await self.tourSupportedLanguages(db);\n const matchTSL = allTSL.filter(x => matchSSLIds.includes(x.siteSupportedLanguageId));\n const matchTSLIds = matchTSL.map(x => x.id);\n const allTranslations = await self.translations(db);\n const matchTranslations = allTranslations.filter(x => matchTSLIds.includes(x.tourSupportedLanguageId));\n\n ( matchTranslations.length > 0 ) ?\n resolve(matchTranslations[0]) :\n reject('Unable to find translation for languageId:' + languageId + ' for tourId:' + self.id);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data);\n\n /* addLinkables */\n obj.site = _site;\n obj.tourType = _tourType;\n obj.tourSubType = _tourSubType;\n obj.style = _style;\n obj.tourStatus = _tourStatus;\n\n obj.tourSupportedLanguages = _tourSupportedLanguages;\n obj.translations = _translations;\n obj.translation = _translation;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'menuItemId',\n 'externalName' : 'menuItemId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourId',\n 'externalName' : 'tourId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'menuOrder',\n 'externalName' : 'menuOrder',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ITourMenuItemDto from \"./TourMenuItemDto.if\";\nimport mappings from \"./TourMenuItemDto.map\";\n\nimport Transformers from './private/transformer';\nimport { IModelSource } from \"./private/db.if\";\nimport DBUtils from './private/db.util';\n\nimport ITourDto from \"./TourDto.if\";\nimport TourDto from \"./TourDto\";\nimport IMenuItemDto from \"./MenuItemDto.if\";\nimport MenuItemDto from \"./MenuItemDto\";\n\nfunction _menuItem(this: ITourMenuItemDto, db: IModelSource): Promise {\n return DBUtils.loadMenuItemId(db, this.menuItemId, MenuItemDto);\n}\n\nfunction _tour(this: ITourMenuItemDto, db: IModelSource): Promise {\n return DBUtils.loadTourId(db, this.tourId, TourDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.menuItem = _menuItem;\n obj.tour = _tour;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tourId',\n 'externalName' : 'tourId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'elementOrder',\n 'externalName' : 'elementOrder',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'siteObjectId',\n 'externalName' : 'siteObjectId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ITourRelatedSiteObjectDto from \"./TourRelatedSiteObjectDto.if\";\nimport mappings from \"./TourRelatedSiteObjectDto.map\";\n\nimport Transformers from './private/transformer';\nimport { IModelSource } from \"./private/db.if\";\nimport DBUtils from './private/db.util';\n\nimport ISiteObjectDto from \"./SiteObjectDto.if\";\nimport SiteObjectDto from \"./SiteObjectDto\";\nimport ITourDto from \"./TourDto.if\";\nimport TourDto from \"./TourDto\";\n\nfunction _siteObject(this: ITourRelatedSiteObjectDto, db: IModelSource): Promise {\n return DBUtils.loadSiteObjectId(db, this.siteObjectId, SiteObjectDto);\n}\nfunction _tour(this: ITourRelatedSiteObjectDto, db: IModelSource): Promise {\n return DBUtils.loadTourId(db, this.tourId, TourDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.siteObject = _siteObject;\n obj.tour = _tour;\n\n return obj;\n}\n\n","\n\n\n\nimport BackgroundModeDto from './BackgroundModeDto'\nimport BeaconDto from './BeaconDto';\nimport BeaconSensitivityDto from './BeaconSensitivityDto';\nimport CountryDto from './CountryDto';\nimport FloorPlanDto from './FloorPlanDto';\nimport FontAlignmentDto from './FontAlignmentDto';\nimport FontSizeUnitDto from './FontSizeUnitDto';\nimport FontFamilyDto from './FontFamilyDto';\nimport FontStyleDto from './FontStyleDto';\nimport LanguageDto from './LanguageDto';\nimport MediumDto from './MediumDto';\nimport MenuItemDto from './MenuItemDto';\nimport MenuItemTranslationDto from './MenuItemTranslationDto';\nimport PinTypeDto from './PinTypeDto';\nimport ScreenOrientationDto from './ScreenOrientationDto';\nimport SiteDto from './SiteDto';\nimport SiteObjectDto from './SiteObjectDto';\nimport SiteObjectKeywordDto from './SiteObjectKeywordDto';\nimport SiteObjectOnFloorPlanDto from './SiteObjectOnFloorPlanDto';\nimport SiteObjectTranslationDto from './SiteObjectTranslationDto';\nimport SiteObjectTypeDto from './SiteObjectTypeDto';\nimport SiteSupportedLanguageDto from './SiteSupportedLanguageDto';\nimport StyleDto from './StyleDto';\nimport TourDto from './TourDto';\nimport TourMenuItemDto from './TourMenuItemDto';\nimport TourRelatedSiteObjectDto from './TourRelatedSiteObjectDto';\nimport TourStatusDto from './TourStatusDto';\nimport TourSubTypeDto from './TourSubTypeDto';\nimport TourSupportedLanguageDto from './TourSupportedLanguageDto';\nimport TourTranslationDto from './TourTranslationDto';\nimport TourTypeDto from './TourTypeDto';\n\nconst models = [\n BackgroundModeDto,\n BeaconDto,\n BeaconSensitivityDto,\n CountryDto,\n FloorPlanDto,\n FontAlignmentDto,\n FontSizeUnitDto,\n FontStyleDto,\n FontFamilyDto,\n LanguageDto,\n MediumDto,\n MenuItemDto,\n MenuItemTranslationDto,\n PinTypeDto,\n ScreenOrientationDto,\n SiteDto,\n SiteObjectDto,\n SiteObjectKeywordDto,\n SiteObjectOnFloorPlanDto,\n SiteObjectTranslationDto,\n SiteObjectTypeDto,\n SiteSupportedLanguageDto,\n StyleDto,\n TourDto,\n TourMenuItemDto,\n TourRelatedSiteObjectDto,\n TourStatusDto,\n TourSubTypeDto,\n TourSupportedLanguageDto,\n TourTranslationDto,\n TourTypeDto,\n];\n\nexport default {\n models,\n BackgroundModeDto,\n BeaconDto,\n BeaconSensitivityDto,\n CountryDto,\n FloorPlanDto,\n FontAlignmentDto,\n FontSizeUnitDto,\n FontFamilyDto,\n FontStyleDto,\n LanguageDto,\n MediumDto,\n MenuItemDto,\n MenuItemTranslationDto,\n PinTypeDto,\n ScreenOrientationDto,\n SiteDto,\n SiteObjectDto,\n SiteObjectKeywordDto,\n SiteObjectOnFloorPlanDto,\n SiteObjectTranslationDto,\n SiteObjectTypeDto,\n SiteSupportedLanguageDto,\n StyleDto,\n TourDto,\n TourMenuItemDto,\n TourRelatedSiteObjectDto,\n TourStatusDto,\n TourSubTypeDto,\n TourSupportedLanguageDto,\n TourTranslationDto,\n TourTypeDto,\n}\n","\n\n\nimport DB from \"./private/db\";\nimport model from \"../../model\";\nimport { IDBOptions, IDBTOptions, DBEntityInstantiator, IPatchData, IWorkspaceTable, IWorkspaceDB } from '../../interface/db';\nimport sitePatchMap from './private/sitePatchMap';\nimport { DexieDBMap } from \"./private/db.if\";\nimport IMapProperty from \"../../model/private/IMapProperty\";\n\nimport IBaseDto from \"../../model/private/IBaseDto\";\nimport IBackgroundModeDto from \"../../model/BackgroundModeDto.if\";\nimport IBeaconDto from \"../../model/BeaconDto.if\";\nimport IBeaconSensitivityDto from \"../../model/BeaconSensitivityDto.if\";\nimport ICountryDto from \"../../model/CountryDto.if\";\nimport IFloorPlanDto from \"../../model/FloorPlanDto.if\";\nimport IFontAlignmentDto from \"../../model/FontAlignmentDto.if\";\nimport IFontFamilyDto from \"../../model/FontFamilyDto.if\";\nimport IFontSizeUnitDto from \"../../model/FontSizeUnitDto.if\";\nimport IFontStyleDto from \"../../model/FontStyleDto.if\";\nimport ILanguageDto from \"../../model/LanguageDto.if\";\nimport IMediumDto from \"../../model/MediumDto.if\";\nimport IMenuItemDto from \"../../model/MenuItemDto.if\";\nimport IMenuItemTranslationDto from \"../../model/MenuItemTranslationDto.if\";\nimport IPinTypeDto from \"../../model/PinTypeDto.if\";\nimport IScreenOrientationDto from \"../../model/ScreenOrientationDto.if\";\nimport ISiteDto from \"../../model/SiteDto.if\";\nimport ISiteObjectDto from \"../../model/SiteObjectDto.if\";\nimport ISiteObjectKeywordDto from \"../../model/SiteObjectKeywordDto.if\";\nimport ISiteObjectOnFloorPlanDto from \"../../model/SiteObjectOnFloorPlanDto.if\";\nimport ISiteObjectTranslationDto from \"../../model/SiteObjectTranslationDto.if\";\nimport ISiteObjectTypeDto from \"../../model/SiteObjectTypeDto.if\";\nimport ISiteSupportedLanguageDto from \"../../model/SiteSupportedLanguageDto.if\";\nimport IStyleDto from \"../../model/StyleDto.if\";\nimport ITourDto from \"../../model/TourDto.if\";\nimport ITourMenuItemDto from \"../../model/TourMenuItemDto.if\";\nimport ITourRelatedSiteObjectDto from \"../../model/TourRelatedSiteObjectDto.if\";\nimport ITourStatusDto from \"../../model/TourStatusDto.if\";\nimport ITourSubTypeDto from \"../../model/TourSubTypeDto.if\";\nimport ITourSupportedLanguageDto from \"../../model/TourSupportedLanguageDto.if\";\nimport ITourTranslationDto from \"../../model/TourTranslationDto.if\";\nimport ITourTypeDto from \"../../model/TourTypeDto.if\";\nimport { Collection, Table } from \"dexie\";\n\n\nfunction _generateDBMappings(): DexieDBMap {\n let dbMapping = {};\n\n for ( const entityName in sitePatchMap.mappings ) {\n if ( !sitePatchMap.mappings.hasOwnProperty(entityName) ) { continue; }\n const interfaceName = sitePatchMap.interfaceNameFromEntityName(entityName);\n const modelObj: IBaseDto = (model as any)[entityName]();\n const mappings: Array = modelObj.mappings();\n (dbMapping as any)[interfaceName] = '++' + mappings.map(item => item.localName).join(',');\n }\n\n return dbMapping;\n}\n\nfunction _instantiator(entityName: string, entityData: object): IBaseDto|null {\n const ctor = (model as any)[entityName];\n\n let obj: IBaseDto|null = null;\n\n if ( ctor ) {\n obj = ctor(entityData);\n } \n\n return obj;\n};\n\nclass ContainerTable implements IWorkspaceTable {\n private _table: Table;\n private _entityName: string;\n\n constructor (options: IDBTOptions) {\n this._table = options.table;\n this._entityName = options.entityName;\n }\n\n count(): Promise {\n return this._table.count();\n }\n\n first(): Promise {\n const table = this._table;\n const entityName = this._entityName;\n return new Promise(function(resolve, reject) {\n table\n .toArray()\n .then( (arr: Array) => {\n if ( arr.length === 0 ) {\n reject(\"No items found\")\n }\n const item: T|null = _instantiator(entityName, arr[0]) as T;\n item ? \n resolve(item):\n reject('Failed to instantiate element ' + entityName);\n } )\n .catch( (err: Error) => reject(err) );\n });\n }\n\n get(pk: any): Promise {\n const table = this._table;\n const entityName = this._entityName;\n return new Promise(function(resolve, reject) {\n table\n .get(pk)\n .then( (data: object): void => {\n const item = _instantiator(entityName, data) as T;\n if ( item != null ) {\n resolve(item);\n } else {\n reject(\"Unable to instantiate item for pk:\" + pk);\n }\n })\n .catch( (err: Error) => reject(err) );\n });\n }\n\n all(): Promise {\n const table = this._table;\n const entityName = this._entityName;\n return new Promise(function(resolve, reject) {\n table\n .toArray()\n .then( (arr: Array) => {\n const items: T[] = [];\n arr.forEach(x => {\n const item = _instantiator(entityName, x)\n if ( item ) {\n items.push(item as T);\n }\n })\n resolve(items);\n } )\n .catch( (err: Error) => reject(err) );\n });\n }\n\n bulkAddOrUpdate(items: Array): Promise {\n const table = this._table;\n const entityName = this._entityName;\n return new Promise(function(resolve, reject) {\n table\n .bulkPut(items, {allKeys: false})\n .then( () => resolve() )\n .catch( (err: Error) => {\n reject(err);\n } )\n })\n }\n}\n\n\nclass ContainerDB implements IWorkspaceDB {\n private _db: DB;\n private _openCount: number = 0;\n\n name: string = \"\";\n\n constructor (options: IDBOptions = {}) {\n this._db = new DB({\n version: 1,\n mappings: _generateDBMappings(),\n name: options.name ?? \"Workspace\",\n indexedDB: options.indexedDB,\n IDBKeyRange: options.IDBKeyRange,\n });\n\n this.name = this._db.name;\n }\n\n open(): Promise {\n this._openCount += 1;\n\n if ( this.isOpen() && this._openCount > 1 ) {\n return Promise.resolve(this); /* already open */\n }\n\n const self = this;\n\n return new Promise((resolve, reject) => {\n this._db.open()\n .then(_ => resolve(self))\n .catch(err => reject(err));\n });\n }\n\n close(): void {\n if ( this.isOpen() && this._openCount === 1 ) {\n this._db.close();\n }\n\n this._openCount = Math.max(0, this._openCount-1);\n }\n\n isOpen(): boolean {\n return this._db.isOpen();\n }\n\n getTable(interfaceName: string) : ContainerTable {\n const tableName = interfaceName;\n const entityName = sitePatchMap.entityNameFromInterfaceName(interfaceName);\n const table = this._db.table(tableName);\n const container = new ContainerTable({\n entityName,\n table,\n })\n return container;\n }\n\n first(tableName: string): Promise {\n if ( !tableName ) {\n return Promise.reject('No Table to search with');\n }\n\n const db = this._db;\n return new Promise(function(resolve, reject) {\n db.table(tableName)\n .toArray()\n .then( (items: Array) => {\n resolve(items[0]);\n })\n .catch( (err: Error) => reject(err) );\n });\n }\n\n get(tableName: string, pk: any): Promise {\n if ( !pk ) {\n return Promise.reject(`No PK to search with, table:${tableName}, pk:${pk}`);\n }\n\n const db = this._db;\n return new Promise(function(resolve, reject) {\n db.table(tableName)\n .get(pk)\n .then( (data: object) => {\n let entityName = sitePatchMap.entityNameFromTableName(tableName);\n let item = _instantiator(entityName, data) as T;\n resolve(item);\n })\n .catch( (err: Error) => reject(err) );\n })\n }\n\n all(tableName: string): Promise> {\n if ( !tableName ) {\n return Promise.reject('No Table to search with');\n }\n\n const db = this._db;\n return new Promise>(function(resolve, reject) {\n db.table(tableName)\n .toArray()\n .then( (items: Array) => {\n resolve(items);\n })\n .catch( (err: Error) => reject(err) );\n })\n }\n\n\n backgroundMode = () => this.getTable('IBackgroundModeDto');\n beacons = () => this.getTable('IBeaconDto');\n beaconSensitivity = () => this.getTable('IBeaconSensitivityDto');\n country = () => this.getTable('ICountryDto');\n floorPlan = () => this.getTable('IFloorPlanDto');\n fontAlignment = () => this.getTable('IFontAlignmentDto');\n fontFamily = () => this.getTable('IFontFamilyDto');\n fontSizeUnit = () => this.getTable('IFontSizeUnitDto');\n fontStyle = () => this.getTable('IFontStyleDto');\n language = () => this.getTable('ILanguageDto');\n medium = () => this.getTable('IMediumDto');\n menuItem = () => this.getTable('IMenuItemDto');\n menuItemTranslation = () => this.getTable('IMenuItemTranslationDto');\n pinType = () => this.getTable('IPinTypeDto');\n screenOrientation = () => this.getTable('IScreenOrientationDto');\n site = () => this.getTable('ISiteDto');\n siteObject = () => this.getTable('ISiteObjectDto');\n siteObjectKeyword = () => this.getTable('ISiteObjectKeywordDto');\n siteObjectOnFloorPlan = () => this.getTable('ISiteObjectOnFloorPlanDto');\n siteObjectTranslation = () => this.getTable('ISiteObjectTranslationDto');\n siteObjectType = () => this.getTable('ISiteObjectTypeDto');\n siteSupportedLanguage = () => this.getTable('ISiteSupportedLanguageDto');\n style = () => this.getTable('IStyleDto');\n tour = () => this.getTable('ITourDto');\n tourMenuItem = () => this.getTable('ITourMenuItemDto');\n tourRelatedSiteObject = () => this.getTable('ITourRelatedSiteObjectDto');\n tourStatus = () => this.getTable('ITourStatusDto');\n tourSubType = () => this.getTable('ITourSubTypeDto');\n tourSupportedLanguage = () => this.getTable('ITourSupportedLanguageDto');\n tourTranslation = () => this.getTable('ITourTranslationDto');\n tourType = () => this.getTable('ITourTypeDto');\n}\n\nexport default ContainerDB;","\n\n\nimport { IFetcher } from '../interface/util'\nimport { IConfigAPI, IConfigCache, injectConfigAPI, injectConfigCache } from '../interface/config';\nimport DexieDB from \"../private/db/private/db\";\nimport { ISession, ISessionOptions } from \"../interface/session\";\nimport authManager from \"../private/manager/auth\";\nimport mediaManager from \"../private/manager/media\";\nimport userState from \"../private/manager/userState\";\nimport operationManager from \"../private/manager/operation\";\nimport { IAuthenticationManager } from \"../interface/authentication\";\nimport { IWorkspaceDB } from \"../interface/db\";\nimport ContainerDB from \"../private/db/db\";\nimport { IAuthManager } from '../private/manager/auth.if';\n\nconst TABLE_NAME = \"ISession\";\nconst TABLE_OPTIONS = \"name, grouping, languageId, tourId, auth\"\n\nexport interface PrivSaveData {\n name: string;\n auth: string;\n}\n\nfunction _db(options: ISessionOptions = {}): DexieDB {\n let db = new DexieDB({\n version: 1,\n mappings: {\n [TABLE_NAME]: TABLE_OPTIONS,\n },\n name: options.name ?? TABLE_NAME,\n });\n\n return db;\n}\n\nfunction _toPrivate(session: ISession) : PrivSaveData {\n return {\n name: session.name,\n auth: (session.auth as IAuthManager).serialize() ?? ''\n }\n}\n\nfunction _authManager(): IAuthenticationManager {\n const config = injectConfigAPI();\n\n const auth = authManager({\n apiUrl : config.url, \n apiExtension: config.extension.auth,\n clientId : config.auth.clientId, \n clientSecret: config.auth.clientSecret,\n grantType: config.auth.grantType,\n username: config.auth.username,\n password: config.auth.password,\n })\n\n return auth;\n}\n\nfunction _workspaceDB(name: string): IWorkspaceDB {\n return new ContainerDB({\n name,\n });\n}\n\nfunction _toSession(data: PrivSaveData, options: ISessionOptions = {}) : ISession {\n const configAPI = injectConfigAPI();\n const configCache = injectConfigCache();\n\n const auth = authManager(data.auth);\n const db = _workspaceDB(data.name);\n\n const media = mediaManager(db, auth, configAPI, configCache);\n const operation = operationManager(auth, media, db, data.name);\n const state = userState(data.name);\n\n const save = function(this: ISession) { _save(this as ISession, options) }\n const remove = function(this: ISession) { _remove(data.name, options) }\n\n const session: ISession = {\n name: data.name,\n\n auth,\n db,\n media,\n operation,\n state,\n\n save,\n remove,\n }\n return session;\n}\n\nfunction _load(name: string, options: ISessionOptions = {}): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const db = _db(options);\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n const result: PrivSaveData = await table.get(name);\n\n db.close();\n if ( result ) {\n const loadData = _toSession(result);\n resolve(loadData)\n } else {\n reject('Unable to find session named: ' + name)\n } \n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _save(session: ISession, options: ISessionOptions = {}) : Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const db = _db(options);\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n\n const saveObject = _toPrivate(session);\n\n const result = await table.put(saveObject);\n\n db.close();\n\n ( result === session.name ) ?\n resolve() :\n reject('Failed to save data into patch-storage table');\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _remove(name: string, options: ISessionOptions = {}): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const db = _db(options);\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n\n await table.delete(name);\n\n db.close();\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction session(name: string, options: ISessionOptions = {}): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n let session: ISession|null = null;\n\n try {\n session = await _load(name, options);\n } catch (error) {\n /* ignore */\n }\n\n if ( !session ) {\n session = _toSession({\n name: name,\n auth: (_authManager() as IAuthManager).serialize(),\n })\n }\n \n resolve(session); \n } catch (error) {\n reject(error);\n }\n })\n}\n\nexport default session;","\n\n\n\nimport session from './session';\n\nexport default session\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'parentId',\n 'externalName' : 'parentId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'isDefault',\n 'externalName' : 'isDefault',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'description',\n 'externalName' : 'description',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'foregroundImageMediumId',\n 'externalName' : 'foregroundImageMediumId',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'backgroundImageMediumId',\n 'externalName' : 'backgroundImageMediumId',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'backgroundColor',\n 'externalName' : 'backgroundColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'menuImageMediumId',\n 'externalName' : 'menuImageMediumId',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'backgroundModeId',\n 'externalName' : 'backgroundModeId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'menuColor',\n 'externalName' : 'menuColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'primaryFontFamilyId',\n 'externalName' : 'primaryFontFamilyId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'primaryFontStyleId',\n 'externalName' : 'primaryFontStyleId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'primaryFontSize',\n 'externalName' : 'primaryFontSize',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'primaryFontSizeUnitId',\n 'externalName' : 'primaryFontSizeUnitId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'primaryFontColor',\n 'externalName' : 'primaryFontColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'primaryFontAlignmentId',\n 'externalName' : 'primaryFontAlignmentId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'secondaryFontFamilyId',\n 'externalName' : 'secondaryFontFamilyId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'secondaryFontStyleId',\n 'externalName' : 'secondaryFontStyleId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'secondaryFontSize',\n 'externalName' : 'secondaryFontSize',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'secondaryFontSizeUnitId',\n 'externalName' : 'secondaryFontSizeUnitId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'secondaryFontColor',\n 'externalName' : 'secondaryFontColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'secondaryFontAlignmentId',\n 'externalName' : 'secondaryFontAlignmentId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tertiaryFontFamilyId',\n 'externalName' : 'tertiaryFontFamilyId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tertiaryFontStyleId',\n 'externalName' : 'tertiaryFontStyleId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tertiaryFontSize',\n 'externalName' : 'tertiaryFontSize',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tertiaryFontSizeUnitId',\n 'externalName' : 'tertiaryFontSizeUnitId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'tertiaryFontColor',\n 'externalName' : 'tertiaryFontColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'tertiaryFontAlignmentId',\n 'externalName' : 'tertiaryFontAlignmentId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'foregroundImageFileName',\n 'externalName' : 'foregroundImageFileName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'removeForegroundImage',\n 'externalName' : 'removeForegroundImage',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'menuImageFileName',\n 'externalName' : 'menuImageFileName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'removeMenuImage',\n 'externalName' : 'removeMenuImage',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'backgroundImageFileName',\n 'externalName' : 'backgroundImageFileName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'removeBackgroundImage',\n 'externalName' : 'removeBackgroundImage',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'hasChildren',\n 'externalName' : 'hasChildren',\n 'defaultValue' : false,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IStyleDto from \"./StyleDto.if\";\nimport mappings from \"./StyleDto.map\";\nimport IFontSizeUnitDto from \"./FontSizeUnitDto.if\";\nimport FontSizeUnitDto from \"./FontSizeUnitDto\";\nimport IMediumDto from \"./MediumDto.if\";\nimport MediumDto from \"./MediumDto\";\nimport IBackgroundMode from \"./BackgroundModeDto.if\";\nimport BackgroundMode from \"./BackgroundModeDto\";\nimport IFontFamilyDto from \"./FontFamilyDto.if\";\nimport FontFamilyDto from \"./FontFamilyDto\";\nimport IFontStyleDto from \"./FontStyleDto.if\";\nimport FontStyleDto from \"./FontStyleDto\";\nimport IFontAlignmentDto from \"./FontAlignmentDto.if\";\nimport FontAlignmentDto from \"./FontAlignmentDto\";\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from \"./SiteDto\";\n\nimport Transformers from './private/transformer';\nimport DBUtils from './private/db.util';\nimport { IModelSource } from \"./private/db.if\";\n\nfunction _parent(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadStyleId(db, this.parentId, StyleDto);\n}\n\nfunction _site(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadSiteId(db, this.siteId, SiteDto);\n}\n\nfunction _foregroundImageMedium(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadMediumId(db, this.foregroundImageMediumId, MediumDto);\n}\n\nfunction _backgroundImageMedium(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadMediumId(db, this.backgroundImageMediumId, MediumDto);\n}\n\nfunction _menuImageMedium(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadMediumId(db, this.menuImageMediumId, MediumDto);\n}\n\nfunction _backgroundMode(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadBackgroundModeId(db, this.backgroundModeId, BackgroundMode);\n}\n\nfunction _primaryFontFamily(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontFamilyId(db, this.primaryFontFamilyId, FontFamilyDto);\n}\n\nfunction _primaryFontStyle(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontStyleId(db, this.primaryFontStyleId, FontStyleDto);\n}\n\nfunction _primaryFontSizeUnit(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontSizeUnitId(db, this.primaryFontSizeUnitId, FontSizeUnitDto);\n}\n\nfunction _primaryFontAlignment(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontAlignmentId(db, this.primaryFontAlignmentId, FontAlignmentDto);\n}\n\nfunction _secondaryFontFamily(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontFamilyId(db, this.secondaryFontFamilyId, FontFamilyDto);\n}\n\nfunction _secondaryFontStyle(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontStyleId(db, this.secondaryFontStyleId, FontStyleDto);\n}\n\nfunction _secondaryFontSizeUnit(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontSizeUnitId(db, this.secondaryFontSizeUnitId, FontSizeUnitDto);\n}\n\nfunction _secondaryFontAlignment(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontAlignmentId(db, this.secondaryFontAlignmentId, FontAlignmentDto);\n}\n\nfunction _tertiaryFontFamily(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontFamilyId(db, this.tertiaryFontFamilyId, FontFamilyDto);\n}\n\nfunction _tertiaryFontStyle(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontStyleId(db, this.tertiaryFontStyleId, FontStyleDto);\n}\n\nfunction _tertiaryFontSizeUnit(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontSizeUnitId(db, this.tertiaryFontSizeUnitId, FontSizeUnitDto);\n}\n\nfunction _tertiaryFontAlignment(this: IStyleDto, db: IModelSource): Promise {\n return DBUtils.loadFontAlignmentId(db, this.tertiaryFontAlignmentId, FontAlignmentDto);\n}\n\nfunction StyleDto(data: object) { \n const obj = Transformers.create(mappings, data);\n\n /* addLinkables */\n obj.parent = _parent;\n obj.site = _site;\n obj.foregroundImageMedium = _foregroundImageMedium;\n obj.backgroundImageMedium = _backgroundImageMedium;\n obj.menuImageMedium = _menuImageMedium;\n obj.backgroundMode = _backgroundMode;\n\n obj.primaryFontFamily = _primaryFontFamily;\n obj.primaryFontStyle = _primaryFontStyle;\n obj.primaryFontSizeUnit = _primaryFontSizeUnit;\n obj.primaryFontAlignment = _primaryFontAlignment;\n\n obj.secondaryFontFamily = _secondaryFontFamily;\n obj.secondaryFontStyle = _secondaryFontStyle;\n obj.secondaryFontSizeUnit = _secondaryFontSizeUnit;\n obj.secondaryFontAlignment = _secondaryFontAlignment;\n\n obj.tertiaryFontFamily = _tertiaryFontFamily;\n obj.tertiaryFontStyle = _tertiaryFontStyle;\n obj.tertiaryFontSizeUnit = _tertiaryFontSizeUnit;\n obj.tertiaryFontAlignment = _tertiaryFontAlignment;\n\n return obj;\n}\n\nexport default StyleDto\n\n","\nimport { CSSProperties, createRef, useEffect, useState } from 'react';\nimport styles from './Loading.module.css';\n\nexport interface ILoadingProps {\n styleOverrides?: CSSProperties;\n}\n\nenum StyleElem {\n Container = \"Container\",\n Text = \"Text\",\n}\n\nconst DEFAULTS: Record = {\n [StyleElem.Container]: {},\n [StyleElem.Text]: {}\n};\n\nconst PROPS_APPLICATOR: Record CSSProperties)> = {\n [StyleElem.Container]: (props: ILoadingProps) => ({\n ...props.styleOverrides,\n }),\n [StyleElem.Text]: (props: ILoadingProps) => ({}),\n};\n\nexport function classNameForElement(element: StyleElem, props: ILoadingProps) : string {\n const name = element.toString();\n const classLoad = styles[name];\n return classLoad ?? '';\n}\n\nexport function styleForElement(elem: StyleElem, props: ILoadingProps): CSSProperties {\n const style = Object.assign({}, \n DEFAULTS[elem],\n PROPS_APPLICATOR[elem](props),\n );\n\n return style;\n}\n\nfunction _LoadingText(index: number) {\n let text = 'Loading';\n\n for ( let i=0; i styleForElement(elem, props);\n const className = (elem: StyleElem) => classNameForElement(elem, props);\n const [loadCounter, setLoadCounter] = useState(0);\n\n const ref = createRef();\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n setLoadCounter(val => val > 8 ? 0 : val+1);\n }, 800);\n\n return () => clearTimeout(timeout);\n },)\n\n return (\n
\n {_LoadingText(loadCounter)}\n
\n )\n}\n\nexport default View;","import { injectENV } from \"./util\";\n\nconst KEY_ALL_MODELOVERRIDES = 'REACT_APP_MODELOVERRIDES';\n\ntype ModelOverrides = Record T)|undefined>\n\nexport function getProjectOverrides(name: string, obj: T): T {\n const env = injectENV();\n const allOverrides = env.getValueWithDefault>(KEY_ALL_MODELOVERRIDES, {});\n const overrideMapper = allOverrides[name];\n const result = overrideMapper ? overrideMapper(obj) : obj;\n return result;\n}\n","\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [{\n 'localName': 'id',\n 'externalName': 'id',\n 'defaultValue': 0,\n},\n{\n 'localName': 'name',\n 'externalName': 'localizedName',\n 'defaultValue': '',\n},\n{\n 'localName': 'code',\n 'externalName': 'name',\n 'defaultValue': '',\n},\n{\n 'localName': 'isDefault',\n 'externalName': 'isDefault',\n 'defaultValue': false,\n}];\n\nexport default MAPPINGS;","\n\n\n\nimport ILanguageDto from \"./LanguageDto.if\";\nimport mappings from \"./LanguageDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'int1',\n 'externalName' : 'int1',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'int2',\n 'externalName' : 'int2',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'int3',\n 'externalName' : 'int3',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'int4',\n 'externalName' : 'int4',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'altBoolean1',\n 'externalName' : 'altBoolean1',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'altBoolean2',\n 'externalName' : 'altBoolean2',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'isUniversal',\n 'externalName' : 'isUniversal',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'keypadNumber',\n 'externalName' : 'keypadNumber',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'siteObjectTypeId',\n 'externalName' : 'siteObjectTypeId',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'beaconId',\n 'externalName' : 'beaconId',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'beaconSensitivityId',\n 'externalName' : 'beaconSensitivityId',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'fontSize',\n 'externalName' : 'fontSize',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'fontFamily',\n 'externalName' : 'fontFamily',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'fontColor',\n 'externalName' : 'fontColor',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'menuPosition',\n 'externalName' : 'menuPosition',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'nextObjectId',\n 'externalName' : 'nextObjectId',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'relatedObject1Id',\n 'externalName' : 'relatedObject1Id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'relatedObject2Id',\n 'externalName' : 'relatedObject2Id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'relatedObject3Id',\n 'externalName' : 'relatedObject3Id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'relatedObject4Id',\n 'externalName' : 'relatedObject4Id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'relatedObject5Id',\n 'externalName' : 'relatedObject5Id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'removeForegroundImage',\n 'externalName' : 'removeForegroundImage',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'foregroundImageMediumId',\n 'externalName' : 'foregroundImageMediumId',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'foregroundImageFileName',\n 'externalName' : 'foregroundImageFileName',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'removeBackgroundImage',\n 'externalName' : 'removeBackgroundImage',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'backgroundImageMediumId',\n 'externalName' : 'backgroundImageMediumId',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'backgroundImageFileName',\n 'externalName' : 'backgroundImageFileName',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'removeMenuImage',\n 'externalName' : 'removeMenuImage',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'menuImageMediumId',\n 'externalName' : 'menuImageMediumId',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'menuImageFileName',\n 'externalName' : 'menuImageFileName',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'namePropagation',\n 'externalName' : 'namePropagation',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'longNamePropagation',\n 'externalName' : 'longNamePropagation',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'descriptionPropagation',\n 'externalName' : 'descriptionPropagation',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'alternativeText1Propagation',\n 'externalName' : 'alternativeText1Propagation',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'alternativeText2Propagation',\n 'externalName' : 'alternativeText2Propagation',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'mediumPropagation',\n 'externalName' : 'mediumPropagation',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'mediumFileName',\n 'externalName' : 'mediumFileName',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'removeMedium',\n 'externalName' : 'removeMedium',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'backgroundColor',\n 'externalName' : 'backgroundColor',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'foregroundColor',\n 'externalName' : 'foregroundColor',\n 'defaultValue' : '',\n },\n {\n 'localName' : 'styleId',\n 'externalName' : 'styleId',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'toursCount',\n 'externalName' : 'toursCount',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'publishedToursCount',\n 'externalName' : 'publishedToursCount',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'deleted',\n 'externalName' : 'deleted',\n 'defaultValue' : false,\n },\n {\n 'localName' : 'keywords',\n 'externalName' : 'keywords',\n 'defaultValue' : 0,\n customImport : function(source: Object): any {\n const siteObjectKeywords: Array = source.hasOwnProperty('keywords') ? (source as any)['keywords'] : []\n const keywords: string[] = [];\n for ( const keywordObj of siteObjectKeywords ) {\n const name: string = keywordObj.hasOwnProperty('name') ? (source as any)['name'] : undefined;\n if ( name !== undefined ) {\n keywords.push(name);\n }\n }\n\n return keywords;\n },\n removeValueOnExport: true,\n },\n];\n\nexport default MAPPINGS;\n\n","\n\nimport ISiteObjectDto from \"./SiteObjectDto.if\";\nimport mappings from \"./SiteObjectDto.map\";\n\nimport Transformers from './private/transformer';\nimport DBUtil from './private/db.util';\nimport { IModelSource } from \"./private/db.if\";\n\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from \"./SiteDto\";\nimport ISiteObjectTypeDto from \"./SiteObjectTypeDto.if\";\nimport SiteObjectTypeDto from \"./SiteObjectTypeDto\";\nimport IStyleDto from \"./StyleDto.if\";\nimport StyleDto from \"./StyleDto\";\nimport IMediumDto from \"./MediumDto.if\";\nimport MediumDto from \"./MediumDto\";\nimport IBeaconSensitivityDto from \"./BeaconSensitivityDto.if\";\nimport BeaconSensitivityDto from \"./BeaconSensitivityDto\";\nimport IBeaconDto from \"./BeaconDto.if\";\nimport BeaconDto from \"./BeaconDto\";\nimport ISiteObjectTranslationDto from \"./SiteObjectTranslationDto.if\";\nimport SiteObjectTranslationDto from \"./SiteObjectTranslationDto\";\nimport ILanguageDto from \"./LanguageDto.if\";\n\n\nfunction _site(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteId(db, this.siteId, SiteDto);\n}\n\nfunction _type(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectTypeId(db, this.siteObjectTypeId, SiteObjectTypeDto);\n}\n\nfunction _beacon(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadBeaconId(db, this.beaconId, BeaconDto);\n}\n\nfunction _beaconSensitivity(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadBeaconSensitivityId(db, this.beaconSensitivityId, BeaconSensitivityDto);\n}\n\nfunction _nextObject(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.nextObjectId, SiteObjectDto);\n}\n\nfunction _relatedObject1(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.relatedObject1Id, SiteObjectDto);\n}\n\nfunction _relatedObject2(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.relatedObject2Id, SiteObjectDto);\n}\n\nfunction _relatedObject3(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.relatedObject3Id, SiteObjectDto);\n}\n\nfunction _relatedObject4(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.relatedObject4Id, SiteObjectDto);\n}\n\nfunction _relatedObject5(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.relatedObject5Id, SiteObjectDto);\n}\n\nfunction _foregroundImageMedium(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadMediumId(db, this.foregroundImageMediumId, MediumDto);\n}\n\nfunction _backgroundImageMedium(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadMediumId(db, this.backgroundImageMediumId, MediumDto);\n}\n\nfunction _menuImageMedium(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadMediumId(db, this.menuImageMediumId, MediumDto);\n}\n\nfunction _style(this: ISiteObjectDto, db: IModelSource): Promise {\n return DBUtil.loadStyleId(db, this.styleId, StyleDto);\n}\n\nfunction _translations(this: ISiteObjectDto, db: IModelSource): Promise {\n const siteObject = this;\n return new Promise( (resolve, reject) => {\n DBUtil.allSiteObjectTranslations(db, SiteObjectTranslationDto)\n .then((translations) => {\n const match = translations.filter(x => x.siteObjectId === siteObject.id);\n if ( match.length > 0 ) {\n resolve(match)\n } else {\n reject('No translations found for siteObjectId:'+siteObject.id);\n }\n })\n .catch((error: Error) => reject(error));\n })\n};\n\nfunction _translation(this: ISiteObjectDto, db: IModelSource, language: ILanguageDto|number): Promise {\n const languageId: Number = \n ((language as ILanguageDto)?.id != undefined) ?\n Number((language as ILanguageDto).id ?? -1) :\n Number(language);\n\n const siteObject = this;\n return new Promise(function(resolve, reject) {\n siteObject.translations(db)\n .then(function(allTranslations) {\n const match = allTranslations.filter(x=>x.languageId === languageId);\n if ( match.length > 0 ) {\n resolve(match[0]);\n } else {\n reject(\"Unable to find matching translation in siteobject:\" + siteObject.id + \", for language:\" + languageId);\n }\n })\n .catch((error: Error) => reject(error));\n });\n};\n\nfunction _relatedObjects(this: ISiteObjectDto, db: IModelSource): Promise> {\n const siteObject = this;\n\n return new Promise(async function(resolve, reject) {\n const promises: Array> = [];\n\n if ( siteObject.relatedObject1Id > 0 ) {\n promises.push(siteObject.relatedObject1(db));\n }\n\n if ( siteObject.relatedObject2Id > 0 ) {\n promises.push(siteObject.relatedObject2(db));\n }\n\n if ( siteObject.relatedObject3Id > 0 ) {\n promises.push(siteObject.relatedObject3(db));\n }\n\n if ( siteObject.relatedObject4Id > 0 ) {\n promises.push(siteObject.relatedObject4(db));\n }\n\n if ( siteObject.relatedObject5Id > 0 ) {\n promises.push(siteObject.relatedObject5(db));\n }\n\n let objects: Array = [];\n\n if ( promises.length > 0 ) {\n objects = await Promise.all(promises);\n }\n\n resolve(objects);\n });\n}\n\nfunction SiteObjectDto(data: object) { \n const obj = Transformers.create(mappings, data); \n \n /* addLinkables */\n obj.site = _site;\n obj.type = _type;\n obj.beacon = _beacon;\n obj.beaconSensitivity = _beaconSensitivity;\n obj.nextObject = _nextObject;\n obj.relatedObject1 = _relatedObject1;\n obj.relatedObject2 = _relatedObject2;\n obj.relatedObject3 = _relatedObject3;\n obj.relatedObject4 = _relatedObject4;\n obj.relatedObject5 = _relatedObject5;\n obj.foregroundImageMedium = _foregroundImageMedium;\n obj.backgroundImageMedium = _backgroundImageMedium;\n obj.menuImageMedium = _menuImageMedium;\n obj.style = _style;\n\n obj.translations = _translations;\n\n obj.translation = _translation;\n\n obj.relatedObjects = _relatedObjects;\n \n return obj;\n}\n\nexport default SiteObjectDto\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'languageId',\n 'externalName' : 'languageId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ISiteSupportedLanguageDto from \"./SiteSupportedLanguageDto.if\";\nimport mappings from \"./SiteSupportedLanguageDto.map\";\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from \"./SiteDto\";\n\nimport Transformers from './private/transformer';\nimport { IModelSource } from \"./private/db.if\";\nimport DBUtil from './private/db.util';\n\nfunction _site(this: ISiteSupportedLanguageDto, db: IModelSource): Promise {\n return DBUtil.loadSiteId(db, this.siteId, SiteDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.site = _site;\n\n return obj;\n}\n\n","\nimport PPromise from 'p-progress';\nimport { IContainer, ILazyBinder, injectContainer } from './container';\nimport { IFetchRequest } from './util';\n\nexport enum IServiceWorkerStatus {\n Off = 0,\n Idle = 1,\n Starting = 2,\n Running = 3,\n Stopped = 4,\n}\n\nexport interface IServiceWorker {\n status: IServiceWorkerStatus;\n start: () => void;\n stop: () => void;\n\n isInterceptingNetworkRequests: () => boolean;\n\n addCacheFirst: (matcher: RegExp, maxAge: number, maxEntries: number, cacheName: string) => void;\n addOAuthTokenCache: (pathSuffix: string) => void;\n addZipPathFetchResponder: (zipPath: string, relativeRespondPath: string) => void;\n addHeader: (matcher: RegExp, headerKey: string, headerVal: string, expiration: Date) => void;\n\n isRequestCached: (request: IFetchRequest, cacheName?: string) => Promise;\n addRequestsToCache: (requests: Array, cacheName: string) => PPromise;\n}\n\nconst TYPES = {\n IServiceWorker: Symbol.for(\"IServiceWorker\"),\n}\n\nexport function injectServiceWorker(container: IContainer = injectContainer()): Promise {\n return container.get>(TYPES.IServiceWorker)();\n}\n\nexport function bindServiceWorker(binder: ILazyBinder, container: IContainer = injectContainer()) {\n container.bind>(TYPES.IServiceWorker, binder);\n}\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'siteObjectId',\n 'externalName' : 'siteObjectId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'languageId',\n 'externalName' : 'languageId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'longName',\n 'externalName' : 'longName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'description',\n 'externalName' : 'description',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'alternativeText1',\n 'externalName' : 'alternativeText1',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'alternativeText2',\n 'externalName' : 'alternativeText2',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'mediumId',\n 'externalName' : 'mediumId',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'text',\n 'externalName' : 'text',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'deleted',\n 'externalName' : 'deleted',\n 'defaultValue' : false,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ISiteObjectTranslationDto from \"./SiteObjectTranslationDto.if\";\nimport mappings from \"./SiteObjectTranslationDto.map\";\nimport IMediumDto from \"./MediumDto.if\";\nimport MediumDto from \"./MediumDto\";\nimport ILanguageDto from \"./LanguageDto.if\";\nimport LanguageDto from \"./LanguageDto\";\nimport ISiteObjectDto from \"./SiteObjectDto.if\";\nimport SiteObjectDto from \"./SiteObjectDto\";\n\nimport Transformers from './private/transformer';\nimport DBUtil from './private/db.util';\nimport { IModelSource } from \"./private/db.if\";\n\nfunction _siteObject(this: ISiteObjectTranslationDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.siteObjectId, SiteObjectDto);\n}\n\nfunction _langauge(this: ISiteObjectTranslationDto, db: IModelSource): Promise {\n return DBUtil.loadLanguageId(db, this.languageId, LanguageDto);\n}\n\nfunction _medium(this: ISiteObjectTranslationDto, db: IModelSource): Promise {\n return DBUtil.loadMediumId(db, this.mediumId, MediumDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.siteObject = _siteObject;\n obj.langauge = _langauge;\n obj.medium = _medium;\n\n return obj;\n}\n\n","\n\n\nimport { ISiteObjectViewModel } from './interface';\n\nfunction placeholderData(): ISiteObjectViewModel {\n return {\n title: {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n fontAlignment: 'center',\n fontWeight: 500,\n color: '#000000',\n visible: true,\n },\n backgroundColor: '#ffffff',\n backgroundImage: {\n url: '',\n mode: 'contain',\n },\n backButton: {\n backgroundColor: '#fff',\n strokeColor: '#000',\n strokeSize: '0.6vmin',\n arrowColor: '#000',\n visible: false,\n }\n };\n}\n\nexport default placeholderData;","\n\n\nimport { Fragment, Suspense, useEffect, useState, lazy, memo } from 'react';\nimport { ISiteObjectViewModel, ISiteObjectType } from '../../components/siteobject/interface';\nimport placeholderData from '../../components/siteobject/placeholderData';\nimport { IRouteSiteObjectArguments, ISiteObjectControllerProps, } from './interface';\nimport LoadingView from '../../components/common/Loading';\nimport type IMapping from \"./mapping\";\nimport { injectLog } from '../../interface/util';\nimport { getProjectOverrides } from '../../interface/overrides';\n\nconst MainView = lazy(() => import('../../components/siteobject'));\nconst loadMapper = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('./mapping')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n });\n};\n\nconst RouteEqual = (route1: Partial, route2: Partial): boolean => {\n if ( route1.db !== route2.db ) { return false; }\n if ( route1.sessionName !== route2.sessionName ) { return false; }\n if ( route1.languageId !== route2.languageId ) { return false; }\n if ( route1.siteObjectId !== route2.siteObjectId ) { return false; }\n if ( route1.tourId !== route2.tourId ) { return false; }\n return true;\n}\n\ninterface ISiteObjectController {\n model: ISiteObjectViewModel;\n type: ISiteObjectType;\n isLoading: boolean;\n}\n\nfunction View(props: ISiteObjectControllerProps): JSX.Element {\n const log = injectLog();\n\n const [state, setState] = useState({\n model: placeholderData(),\n type: ISiteObjectType.Image,\n isLoading: true,\n });\n\n useEffect(() => {\n loadMapper()\n .then(function(mapper) {\n return mapper(props.route, props.didRequestBack);\n }) \n .then(function([model, type]) {\n return setState(stateIn => ({\n ...stateIn, \n props, \n model: getProjectOverrides('ISiteObjectViewModel', model),\n type, \n isLoading:false\n }));\n })\n .then(_ => log.info('Loaded SiteObject'))\n .catch(error => {\n log.error(`Failed to load SiteObject, loading previous page. Error:${error}`)\n props.didRequestBack();\n });\n }, [props, props.route])\n\n return (\n \n \n \n { !state.isLoading && }\n \n \n );\n}\n\nconst propsEqual = (prev: ISiteObjectControllerProps, next: ISiteObjectControllerProps) => {\n return RouteEqual(prev.route, next.route);\n}\n\nexport default memo(View, propsEqual) as typeof View\n\n\n","\nimport { IWorkspaceDB } from \"@workspace/apiservice/src/interface/db\";\nimport ILanguageDto from \"@workspace/apiservice/src/model/LanguageDto.if\";\nimport IMediumDto from \"@workspace/apiservice/src/model/MediumDto.if\";\nimport ISiteObjectDto from \"@workspace/apiservice/src/model/SiteObjectDto.if\";\nimport { session } from \"@workspace/apiservice/src\";\nimport { DataCheckResult } from \"../interface\";\nimport { IRouteSiteObjectArguments } from \"./interface\";\nimport { injectLog } from \"../../interface/util\";\n\nfunction mediaRequired(siteObject: ISiteObjectDto, language: ILanguageDto, db: IWorkspaceDB): Promise> {\n const log = injectLog();\n\n return new Promise(async function(resolve, reject) {\n try {\n let media: IMediumDto[] = [];\n\n const translation = await siteObject.translation(db, language);\n\n if ( translation.mediumId ) {\n media.push(await translation.medium(db));\n }\n\n resolve(media);\n } catch (error) {\n log.error('Failed to map media ' + error);\n reject(error);\n }\n });\n}\n\nfunction NeedsInternet(route: IRouteSiteObjectArguments): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const workspace = await session(route.sessionName);\n\n await workspace.db.open();\n\n const language = await workspace.db.language().get(route.languageId);\n\n const siteObject = await workspace.db.siteObject().get(route.siteObjectId);\n\n const requiredMedia = await mediaRequired(siteObject, language, workspace.db);\n\n const allCached = await workspace.media.isAllMediaCached(requiredMedia.map(medium => medium.id));\n\n const needsInternet = !allCached;\n\n workspace.db.close();\n\n resolve(needsInternet);\n } catch(error) {\n reject(error);\n }\n });\n}\nfunction CanLoad(route: IRouteSiteObjectArguments): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const needsInternet = await NeedsInternet(route);\n\n resolve(\n needsInternet ?\n DataCheckResult.DataNetworkConnectionNeeded :\n DataCheckResult.DataAvailableOffline\n );\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport default CanLoad\n","\nimport Renderer from './render';\nimport CanLoad from './canLoad';\nimport { IRouteSiteObjectArguments, ISiteObjectControllerProps } from './interface';\nimport { IBaseController } from '../interface';\n\nconst exports: IBaseController = {\n renderer: Renderer,\n canRender: () => Promise.resolve({hasEnoughDataToRender:true}),\n canLoad: CanLoad,\n}\n\nexport default exports\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n },\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IFontSizeUnit from \"./FontSizeUnitDto.if\";\nimport mappings from \"./FontSizeUnitDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n },\n {\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n },\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IFontFamilyDto from \"./FontFamilyDto.if\";\nimport mappings from \"./FontFamilyDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IFontStyleDto from \"./FontStyleDto.if\";\nimport mappings from \"./FontStyleDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IFontAlignmentDto from \"./FontAlignmentDto.if\";\nimport mappings from \"./FontAlignmentDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'imageFileName',\n 'externalName' : 'imageFileName',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'removeImage',\n 'externalName' : 'removeImage',\n 'defaultValue' : false,\n},\n{\n 'localName' : 'imageMediumId',\n 'externalName' : 'imageMediumId',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'siteObjectsOnFloorPlanCount',\n 'externalName' : 'siteObjectsOnFloorPlanCount',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'styleId',\n 'externalName' : 'styleId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IFloorPlanDto from \"./FloorPlanDto.if\";\nimport mappings from \"./FloorPlanDto.map\";\nimport IMediumDto from \"./MediumDto.if\";\nimport MediumDto from \"./MediumDto\";\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from \"./SiteDto\";\nimport IStyleDto from \"./StyleDto.if\";\nimport StyleDto from \"./StyleDto\";\n\nimport { IModelSource } from \"./private/db.if\";\nimport Transformers from './private/transformer';\nimport DBUtil from './private/db.util';\nimport ISiteObjectOnFloorPlanDto from \"./SiteObjectOnFloorPlanDto.if\";\nimport SiteObjectOnFloorPlanDto from \"./SiteObjectOnFloorPlanDto\";\nimport ISiteObjectDto from \"./SiteObjectDto.if\";\n\nfunction _image(this: IFloorPlanDto, db: IModelSource): Promise {\n return DBUtil.loadMediumId(db, this.imageMediumId, MediumDto);\n}\n\nfunction _site(this: IFloorPlanDto, db: IModelSource): Promise {\n return DBUtil.loadSiteId(db, this.siteId, SiteDto);\n}\n\nfunction _style(this: IFloorPlanDto, db: IModelSource): Promise {\n return DBUtil.loadStyleId(db, this.styleId, StyleDto);\n}\n\nfunction _allSiteObjectsOnFloorplan(this: IFloorPlanDto, db: IModelSource): Promise {\n const _that = this;\n return new Promise(function(resolve, reject) {\n DBUtil.allSiteObjectOnFloorplan(db, SiteObjectOnFloorPlanDto)\n .then((soFPs) => {\n const match = soFPs.filter(x => x.floorPlanId === _that.id);\n if ( match.length > 0 ) {\n resolve(match)\n } else {\n reject('No SiteObjectOnFloorplans found for floorplanId:'+_that.id);\n }\n })\n .catch(error => reject(error));\n });\n};\n\nfunction _siteObjectOnFloorplan(this: IFloorPlanDto, siteObject: ISiteObjectDto, db: IModelSource): Promise {\n const _that = this;\n return new Promise(function(resolve, reject) {\n _that.allSiteObjectsOnFloorplan(db)\n .then(soFPs => {\n const match = soFPs.filter(x => x.siteObjectId === siteObject.id);\n if ( match.length > 0 ) {\n resolve(match[0])\n } else {\n reject(`No matching soFPs found for floorplanId ${_that.id}/siteObjectId: ${siteObject.id}`);\n }\n })\n .catch(error => reject(error));\n });\n};\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.image = _image;\n obj.site = _site;\n obj.style = _style;\n\n obj.allSiteObjectsOnFloorplan = _allSiteObjectsOnFloorplan;\n obj.siteObjectOnFloorplan = _siteObjectOnFloorplan;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IBackgroundModeDto from \"./BackgroundModeDto.if\";\nimport mappings from \"./BackgroundModeDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'uuid',\n 'externalName' : 'uuid',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'major',\n 'externalName' : 'major',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'minor',\n 'externalName' : 'minor',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'siteId',\n 'externalName' : 'siteId',\n 'defaultValue' : 0,\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IBeaconDto from \"./BeaconDto.if\";\nimport mappings from \"./BeaconDto.map\";\nimport ISiteDto from \"./SiteDto.if\";\nimport SiteDto from './SiteDto';\n\nimport Transformers from './private/transformer';\nimport { IModelSource } from \"./private/db.if\";\nimport DBUtil from './private/db.util';\n\nfunction _site(this: IBeaconDto, db: IModelSource): Promise {\n return DBUtil.loadSiteId(db, this.siteId, SiteDto);\n}\n\nexport default (data: object) => { \n const obj: IBeaconDto = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.site = _site;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'defaultExtensions',\n 'externalName' : 'defaultExtensions',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ISiteObjectTypeDto from \"./SiteObjectTypeDto.if\";\nimport mappings from \"./SiteObjectTypeDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IBeaconSensitivityDto from \"./BeaconSensitivityDto.if\";\nimport mappings from \"./BeaconSensitivityDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'name',\n 'externalName' : 'name',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IScreenOrientationDto from \"./ScreenOrientationDto.if\";\nimport mappings from \"./ScreenOrientationDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n/* id property does not exist on https://api.ats-workspace.com/$metadata/SiteObjectOnFloorPlanDto,\n the primary key is a combination here of the #floorplanId & the #siteObjectId,\n mimic this behaviour */\n{\n 'localName' : 'id',\n 'externalName' : 'id',\n 'defaultValue' : 0,\n customImport : function(source: Object): any {\n const siteObjectId: number = source.hasOwnProperty('siteObjectId') ? (source as any)['siteObjectId'] : 0;\n const floorPlanId: number = source.hasOwnProperty('siteObjectId') ? (source as any)['siteObjectId'] : 0;\n const id = (floorPlanId << 4) & (siteObjectId);\n },\n removeValueOnExport: true,\n},\n{\n 'localName' : 'siteObjectId',\n 'externalName' : 'siteObjectId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'floorPlanId',\n 'externalName' : 'floorPlanId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'x',\n 'externalName' : 'x',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'y',\n 'externalName' : 'y',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'pinTypeId',\n 'externalName' : 'pinTypeId',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'pinColor',\n 'externalName' : 'pinColor',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'siteObjectName',\n 'externalName' : 'siteObjectName',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport ISiteObjectOnFloorPlanDto from \"./SiteObjectOnFloorPlanDto.if\";\nimport mappings from \"./SiteObjectOnFloorPlanDto.map\";\nimport ISiteObjectDto from \"./SiteObjectDto.if\";\nimport SiteObjectDto from \"./SiteObjectDto\";\nimport IFloorPlanDto from \"./FloorPlanDto.if\";\nimport FloorPlanDto from \"./FloorPlanDto\";\nimport IPinTypeDto from \"./PinTypeDto.if\";\nimport PinTypeDto from \"./PinTypeDto\";\n\nimport Transformers from './private/transformer';\nimport DBUtil from './private/db.util';\nimport { IModelSource } from \"./private/db.if\";\n\nfunction _siteObject(this: ISiteObjectOnFloorPlanDto, db: IModelSource): Promise {\n return DBUtil.loadSiteObjectId(db, this.siteObjectId, SiteObjectDto);\n}\nfunction _floorPlan(this: ISiteObjectOnFloorPlanDto, db: IModelSource): Promise {\n return DBUtil.loadFloorplanId(db, this.floorPlanId, FloorPlanDto);\n}\nfunction _pinType(this: ISiteObjectOnFloorPlanDto, db: IModelSource): Promise {\n return DBUtil.loadPinTypeId(db, this.pinTypeId, PinTypeDto);\n}\n\nexport default (data: object) => { \n const obj = Transformers.create(mappings, data); \n\n /* addLinkables */\n obj.siteObject = _siteObject;\n obj.floorPlan = _floorPlan;\n obj.pinType = _pinType;\n\n return obj;\n}\n\n","\n\n\n\nimport IMapProperty from './private/IMapProperty';\n\n\nconst MAPPINGS: Array = [\n {\n 'localName' : 'value',\n 'externalName' : 'value',\n 'defaultValue' : 0,\n},\n{\n 'localName' : 'content',\n 'externalName' : 'content',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'icon',\n 'externalName' : 'icon',\n 'defaultValue' : '',\n},\n{\n 'localName' : 'text',\n 'externalName' : 'text',\n 'defaultValue' : '',\n},\n];\n\nexport default MAPPINGS;\n\n","\n\n\n\n\nimport IPinTypeDto from \"./PinTypeDto.if\";\nimport mappings from \"./PinTypeDto.map\";\nimport Transformers from './private/transformer';\n\n\nexport default (data: object) => { return Transformers.create(mappings, data); }\n\n","\nimport { ITourMainProps } from '../../components/tour/interface';\nimport { IBaseControllerRenderResult } from '../interface';\n\n\nexport interface IRouteTourArguments {\n db: string;\n languageId: number;\n tourId: number;\n sessionName: string;\n}\n\nexport interface ITourControllerProps {\n didRequestSiteObject: (id: number) => void;\n didRequestFloorPlan: (id: number) => void;\n didRequestLanguageSelect: () => void;\n didRequestTourSelect: () => void;\n didRequestBack: () => void;\n route: IRouteTourArguments;\n}\n\nexport interface ISiteObjectSelectControllerRenderResult extends IBaseControllerRenderResult<{siteObjectId: any}> {}\n\nexport enum ITourType {\n Undef = 0,\n List = 1,\n Cascaded = 2,\n Keypad = 3,\n Hamburger = 4, \n LastValue = 5,\n };\n\nexport interface ITourStateActionModifier { \n (model: ITourMainProps): ITourMainProps\n}\n","import { IWorkspaceDB } from \"../interface/db\";\nimport ILanguageDto from \"../model/LanguageDto.if\"\nimport ISiteDto from \"../model/SiteDto.if\"\nimport db from \"../private/db\";\n\nfunction SiteSupportedLanguages(db: IWorkspaceDB, site?: ISiteDto): Promise> {\n return new Promise(async function(resolve, reject) {\n try {\n const siteLookup = site ??\n await (db.site().first() as Promise);\n\n const ssls = await db.siteSupportedLanguage().all();\n\n const languageIds = \n ssls\n .filter(ssl => ssl.siteId === siteLookup.id)\n .map(ssl => ssl.languageId);\n\n const languages = await Promise.all(languageIds.map(id => db.language().get(id)));\n\n resolve(languages);\n } catch (error) {\n reject(error);\n }\n })\n}\n\nconst exports = {\n SiteSupportedLanguages,\n}\n\nexport default exports\n","import { IWorkspaceDB } from \"../interface/db\";\nimport ILanguageDto from \"../model/LanguageDto.if\";\nimport ISiteDto from \"../model/SiteDto.if\";\nimport ITourDto from \"../model/TourDto.if\";\n\nexport function ToursForLanguage(db: IWorkspaceDB, language: ILanguageDto, site?: ISiteDto): Promise> {\n return new Promise(async function(resolve, reject) {\n try {\n /* to get the list of tours we can show based on the language selected we need ITourDto.tourSupportedLanguage.siteSupportedLanguage.language === language */\n const sslMatch = await db.siteSupportedLanguage().all().then(ssl => ssl.filter(x => x.languageId === language.id))\n const sslMatchIds = sslMatch.map(x => x.id);\n\n const tslMatch = await db.tourSupportedLanguage().all().then((tsl)=>tsl.filter(x => sslMatchIds.includes(x.siteSupportedLanguageId)));\n const tslMatchTourIds = tslMatch.map(x => x.tourId);\n\n const tours: ITourDto[] = await db.tour().all().then(tours => tours.filter(tour => tslMatchTourIds.includes(tour.id)));\n\n resolve(tours);\n } catch (error) {\n reject(error);\n }\n })\n}\n\nconst exports = {\n ToursForLanguage\n}\n\nexport default exports\n","\nimport languages from './languages';\nimport tours from './tours';\n\nconst exports = {\n languages,\n tours,\n};\n\nexport default exports\n","\n\n\n\nimport { IConfigAPI } from '../interface/config';\nimport { IEnv } from '../interface/util';\n\nconst DEFAULTS = {\n URL: 'https://api.ats-workspace.com',\n AUTH: {\n CLIENT_ID: 'MobileApplication.Test',\n CLIENT_SECRET: 'secr3t!MobileApplication.Test',\n GRANT_TYPE: 'password',\n USERNAME: 'demo',\n PASSWORD: '@Demo1',\n },\n EXTENSION: {\n AUTH: '/apptoken',\n SITEDATA: '/sites/app.GetMyZipPatchSite',\n MEDIADIFF: '/media/app.CalculateMyMediaDifference',\n MEDIA: '/media(%MEDIAID%)/app.GetFile',\n MEDIA_WITH_ACCESS_TOKEN: '/media(%MEDIAID%)/app.GetFile?access_token=%ACCESS_TOKEN%',\n }\n}\n\nfunction settings(env: IEnv): IConfigAPI {\n const config: IConfigAPI = {\n url: env.getString('REACT_APP_API_URL', DEFAULTS.URL),\n auth: {\n clientId: env.getString('REACT_APP_API_AUTH_CLIENTID', DEFAULTS.AUTH.CLIENT_ID),\n clientSecret: env.getString('REACT_APP_API_AUTH_CLIENTSECRET', DEFAULTS.AUTH.CLIENT_SECRET),\n grantType: env.getString('REACT_APP_API_AUTH_GRANTTYPE', DEFAULTS.AUTH.GRANT_TYPE),\n username: env.getString('REACT_APP_API_AUTH_USERNAME', DEFAULTS.AUTH.USERNAME),\n password: env.getString('REACT_APP_API_AUTH_PASSWORD', DEFAULTS.AUTH.PASSWORD),\n },\n extension: {\n auth: env.getString('REACT_APP_API_EXTENSION_AUTH', DEFAULTS.EXTENSION.AUTH),\n siteData: env.getString('REACT_APP_API_EXTENSION_SITEDATA', DEFAULTS.EXTENSION.SITEDATA),\n mediaDiff: env.getString('REACT_APP_API_EXTENSION_MEDIADIFF', DEFAULTS.EXTENSION.MEDIADIFF),\n media: env.getString('REACT_APP_API_EXTENSION_MEDIA', DEFAULTS.EXTENSION.MEDIA),\n }\n }\n\n return config;\n}\n\nexport default settings\n\n","\n\n\nimport { IConfigAssets, IConfigRoute } from '../interface/config';\nimport { IFetcher, injectLog } from '../interface/util';\n\nconst DEFAULTS: IConfigAssets = {\n static: {\n flags: {\n AD : 'img/asset/flags/ad.png',\n AR : 'img/asset/flags/ar.png',\n BE : 'img/asset/flags/be.png',\n BG : 'img/asset/flags/bg.png',\n BP : 'img/asset/flags/bp.png',\n BSL : 'img/asset/flags/bsl.png',\n CS : 'img/asset/flags/cs.png',\n DE : 'img/asset/flags/de.png',\n EN : 'img/asset/flags/en.png',\n ES : 'img/asset/flags/es.png',\n FI : 'img/asset/flags/fi.png',\n FR : 'img/asset/flags/fr.png',\n GD : 'img/asset/flags/gd.png',\n GL : 'img/asset/flags/gl.png',\n GR : 'img/asset/flags/gr.png',\n HU : 'img/asset/flags/hu.png',\n IS : 'img/asset/flags/is.png',\n IT : 'img/asset/flags/it.png',\n JA : 'img/asset/flags/ja.png',\n KO : 'img/asset/flags/ko.png',\n LT : 'img/asset/flags/lt.png',\n NL : 'img/asset/flags/nl.png',\n NO : 'img/asset/flags/no.png',\n PL : 'img/asset/flags/pl.png',\n PT : 'img/asset/flags/pt.png',\n RO : 'img/asset/flags/ro.png',\n RU : 'img/asset/flags/ru.png',\n SE : 'img/asset/flags/se.png',\n SH : 'img/asset/flags/sh.png',\n ZH : 'img/asset/flags/zh.png',\n },\n },\n pwa: {\n images: {\n icon512: '',\n },\n themeColor: '#fff',\n backgroundColor: '#000',\n name: 'Workspace',\n }\n}\n\ninterface AppManifest {\n short_name: string;\n name: string;\n icons: [{src: string, sizes: string, type: string}],\n start_url: string,\n display: string;\n theme_color: string;\n background_color: string;\n}\n\nfunction load(fetcher: IFetcher, routing: IConfigRoute): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const pathFetch = `${routing.basename}/manifest.json`.replace(/\\/+/g, '/'); /* get the base url from config, append /manifest.json & remove double slashes '//' */\n const manifest = await fetcher({\n url: pathFetch,\n method: 'GET',\n expectedResponseType: 'json'});\n\n let exports: IConfigAssets = {...DEFAULTS};\n\n exports.pwa.themeColor = manifest.payload?.theme_color || exports.pwa.themeColor;\n exports.pwa.backgroundColor = manifest.payload?.background_color || exports.pwa.backgroundColor;\n exports.pwa.images.icon512 = manifest.payload?.icons[manifest.payload?.icons.length -1].src || exports.pwa.images.icon512;\n exports.pwa.name = manifest.payload?.name || exports.pwa.name;\n\n resolve(exports);\n } catch (error) {\n const log = injectLog();\n log.error(`Asset fetch failed: ${JSON.stringify(error)}`);\n reject(error);\n }\n });\n}\n\nexport default load","import { IConfigCache, IConfigCacheName } from \"../interface/config\";\n\nconst settings: IConfigCache = {\n [IConfigCacheName.PublicAssets] : {\n cacheName: 'app-public-cache',\n expiration: (21 * 24 * 60 * 60),\n maxEntries: 200,\n matcher: /public\\/*/,\n },\n [IConfigCacheName.BuildAssets] : {\n cacheName: 'app-build-cache',\n expiration: (21 * 24 * 60 * 60),\n maxEntries: 200,\n matcher: /static\\/*/,\n },\n [IConfigCacheName.WorkspaceMedia] : {\n cacheName: 'app-media-cache',\n expiration: (21 * 24 * 60 * 60),\n maxEntries: 1000,\n matcher: /app.GetFile$/,\n },\n [IConfigCacheName.AppToken] : {\n tokenPath: '/apptoken',\n }\n}\n\nexport default settings;\n","\nimport { IConfigRoutePath, IConfigRoute } from '../interface/config';\nimport { IEnv } from '../interface/util';\n\n\nfunction route(env: IEnv): IConfigRoute {\n \n /* Pull the basename from env, if empty use '' */\n const basenameIn = env.getString('REACT_APP_ROUTE_BASENAME') ?? '';\n /* & make sure it starts/ends with '/', removing any '//' along the way, So if unset we'll get '/', if we get 'develop/ork' the output will be '/develop/ork/' */\n const basename = (`/${basenameIn}/`).replace(/\\/+/g, '/');\n\n const config: IConfigRoute = {\n basename,\n routes: {\n [IConfigRoutePath.Launch]: {\n pathPrefix: '/',\n pathMatch: ['/', '/launch*'],\n },\n [IConfigRoutePath.LanguageSelect]: {\n pathPrefix: '/languageselect',\n pathMatch: ['/languageselect', '/ls'],\n },\n [IConfigRoutePath.TourSelect]: {\n pathPrefix: '/tourselect',\n pathMatch: ['/tourselect*', '/ts*'],\n },\n [IConfigRoutePath.Tour]: {\n pathPrefix: '/tour',\n pathMatch: ['/tour*'],\n },\n [IConfigRoutePath.SiteObject]: {\n pathPrefix: '/siteobject',\n pathMatch: ['/siteobject*', '/so*'],\n },\n [IConfigRoutePath.FloorPlan]: {\n pathPrefix: '/floorplan',\n pathMatch: ['/floorplan*', '/fp*'],\n },\n }\n }\n\n return config;\n}\n\nexport default route","import { ISession } from '@workspace/apiservice/src/interface/session';\nimport { session } from '@workspace/apiservice/src';\nimport { injectServiceWorker, IServiceWorker, IServiceWorkerStatus } from '../../interface/serviceworker';\nimport { injectUserSession, IStateUserSessionManager } from '../../interface/state';\n\nexport function activeSession(state: IStateUserSessionManager): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const userState = await state.current();\n let sessionUser = null;\n if ( userState && userState.sessionName && userState.sessionName.length > 0 ) {\n sessionUser = await session(userState.sessionName);\n }\n resolve(sessionUser);\n } catch (error) {\n reject(error);\n } \n });\n}\n\nexport function hasSelectedLanguage(state: IStateUserSessionManager): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const userState = await state.current();\n const languageSelected = (userState?.languageId || -1) > 0;\n resolve(languageSelected);\n } catch (error) {\n reject(error);\n } \n });\n}\n\nexport function isServiceWorkerRunning(worker: IServiceWorker): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const isRunning = worker.status === IServiceWorkerStatus.Running;\n const workerIsInterceptingFetch = worker.isInterceptingNetworkRequests();\n\n resolve(isRunning && workerIsInterceptingFetch);\n } catch (error) {\n reject(error);\n } \n });\n}\n\nexport function needsMediaDownload(session: ISession): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const allMediaIds = (await session.db.medium().all()).map(medium => medium.id);\n \n const isAllCached = await session.media.isAllMediaCached(allMediaIds);\n\n resolve(!isAllCached);\n } catch (error) {\n reject(error);\n } \n });\n}\n\nfunction canDownloadTour(): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const state = await injectUserSession();\n const worker = await injectServiceWorker();\n\n const isRunning = await isServiceWorkerRunning(worker);\n if ( !isRunning ) { resolve(false); return; }\n\n /* make sure the user is not on (or before) language-selection, otherwise we'll have to download all-media/all-languages */\n const hasSelectedLanguageCode = await hasSelectedLanguage(state);\n if ( !hasSelectedLanguageCode ) { resolve(false); return; }\n\n const session = await activeSession(state);\n if ( !session ) { resolve(false); return; }\n\n const hasMissingMedia = await needsMediaDownload(session);\n if ( !hasMissingMedia ) { resolve(false); return; }\n\n resolve(true);\n } catch (error) {\n reject(error);\n }\n })\n}\n\nfunction byteSizeToDescription(byteSize: number): string {\n const sizeDivisor = Math.floor( Math.log(byteSize) / Math.log(1024) );\n const decimalPlaces = sizeDivisor > 2 ? 1 : 0;\n const units = ['B', 'KiB', 'MiB', 'GiB', 'TiB'];\n const sizeValue = ( byteSize / Math.pow(1024, sizeDivisor) ).toFixed(decimalPlaces);\n const text = `${sizeValue} ${units[sizeDivisor]}`;\n return text\n}\n\nconst exports = {\n activeSession,\n isServiceWorkerRunning,\n needsMediaDownload,\n canDownloadTour,\n byteSizeToDescription,\n};\n\nexport default exports\n","\n\n\nimport ILanguageDto from \"@workspace/apiservice/src/model/LanguageDto.if\";\nimport { ILanguageSelectItemViewModel, ILanguageSelectViewModel } from \"../../components/languageselect/interface\";\nimport { IBaseControllerRenderResult } from \"../interface\";\n\n\nexport interface IRouteLanguageSelectArguments {\n db: string;\n sessionName: string;\n}\n\nexport interface ILanguageSelectControllerProps {\n didRequestTourSelect: (languageId: number) => void;\n didRequestBack: () => void;\n route: IRouteLanguageSelectArguments;\n}\n\nexport interface ILanguageSelectControllerRenderResult extends IBaseControllerRenderResult<{language: ILanguageDto}> {}\n\nexport interface ILanguageSelectController {\n}\n\nexport interface ILanguageSelectItemControllerModel extends ILanguageSelectItemViewModel {\n}\n\nexport interface ILanguageSelectControllerModel extends ILanguageSelectViewModel {\n cycler: any;\n activeTitle: () => string;\n nextTitle: () => string;\n delayBetweenChangingTitle: number;\n}\n\nexport enum ILanguageSelectType {\n Undef = 0,\n List = 1,\n GridFlag = 2,\n GridTile = 3,\n LastValue = 4,\n}\n","\n\n\nimport type ITourDto from \"@workspace/apiservice/src/model/TourDto.if\";\nimport type { ITourSelectItemViewModel, ITourSelectViewModel } from \"../../components/tourselect/interface\";\nimport type { IBaseControllerRenderResult } from \"../interface\";\n\n\nexport interface IRouteTourSelectArguments {\n db: string;\n languageId: number;\n sessionName: string;\n}\n\nexport interface ITourSelectControllerProps {\n didRequestTour: (id: number) => void;\n didRequestBack: () => void;\n route: IRouteTourSelectArguments;\n}\n\nexport interface ITourSelectControllerRenderResult extends IBaseControllerRenderResult<{tour: ITourDto}> {}\n\nexport interface ITourSelectItemControllerModel extends ITourSelectItemViewModel {\n}\n\nexport interface ITourSelectControllerModel extends ITourSelectViewModel {\n}\n\nexport enum ITourSelectType {\n Undef = 0,\n List = 1,\n GridTile = 2,\n GridFeatured = 3,\n LastValue = 4,\n}\n","\n\n\n\nexport interface ITextProps {\n text: string;\n fontFamily: string;\n fontSize: string;\n fontAlignment: \"center\" | \"left\" | \"right\" | \"end\" | \"justify\";\n fontWeight: number;\n color: string;\n visible: boolean;\n}\n\nexport interface IInfoLabel extends ITextProps {\n backgroundColor: string;\n visible: boolean;\n}\nexport interface IImageProps {\n url: string;\n mode: 'contain' | 'cover';\n}\n\nexport enum ISiteObjectType {\n Undef = 0,\n Image = 1,\n Audio = 2,\n Video = 3,\n Html = 4,\n Rubaway = 5,\n LastValue = 6,\n}\n\nexport interface IAudioSiteObjectViewModel extends ISiteObjectViewModel {\n foregroundImage: IImageProps;\n foregroundImageBackgroundColor: string;\n audioDescription: ITextProps;\n audioDescriptionBackgroundColor: string;\n controlsColor: string;\n headphonesMissingViewEnabled: boolean;\n headphonesMissingVisible: boolean;\n speakerIconVisible: boolean;\n spinnerVisible: boolean;\n spinnerColor: string;\n audioUrl: string;\n}\n\nexport interface IVideoSiteObjectViewModel extends ISiteObjectViewModel {\n videoUrl: string;\n controlsColor: string;\n}\n\nexport interface IHTMLSiteObjectViewModel extends ISiteObjectViewModel {\n htmlUrl: string;\n}\n\nexport interface IRubawaySiteObjectViewModel extends ISiteObjectViewModel {\n rubawayImageUrl: string;\n infoLabel?: ITextProps;\n infoBackgroundColor: string;\n}\n\nexport interface IRubawayViewModel extends ISiteObjectViewModel {\n foregroundImageUrl: string;\n toolTipTitle: ITextProps;\n toolTipBackgroundColor: string;\n}\n\nexport interface ISiteObjectViewModel {\n title: ITextProps;\n backgroundColor: string;\n backgroundImage: IImageProps;\n backButton: {\n backgroundColor: string;\n strokeColor: string;\n strokeSize: string;\n arrowColor: string;\n visible: boolean;\n }\n data?: any;\n onLoad?: (update: (model: ISiteObjectViewModel) => void) => void;\n onRemove?: (model: ISiteObjectViewModel) => ISiteObjectViewModel;\n onComplete?: (model: ISiteObjectViewModel) => void;\n}\n\nexport interface ISiteObjectMainProps {\n model: T;\n}\n\nexport interface ISiteObjectIndexProps {\n model: ISiteObjectViewModel;\n type: ISiteObjectType;\n}\n","import { IUserState } from \"../../interface/userstate\";\ninterface IUserStatePrv extends IUserState {\n name: string,\n collection: { [key: string]: any },\n}\n\nconst StoreSymbol = Symbol.for('user-state');\n\nfunction _saveUserState(key: string, state: IUserStatePrv) {\n const store: { [keyof: string]: IUserStatePrv } = (global as any)[StoreSymbol]\n ?? {};\n store[key] = state;\n (global as any)[StoreSymbol] = store;\n}\n\nfunction _userState(name: string): IUserStatePrv|null {\n const store: { [keyof: string]: IUserStatePrv } = (global as any)[StoreSymbol]\n ?? {};\n const val = store[name];\n return val;\n}\n\nfunction _GetValue(state: IUserStatePrv, key: string): any|undefined {\n return state.collection[key];\n}\n\nfunction _SetValue(state: IUserStatePrv, key: string, value: any|undefined) {\n if ( value === undefined ) {\n delete state.collection[key];\n } else {\n state.collection[key] = value;\n }\n _saveUserState(state.name, state);\n}\n\nfunction UserState(name: string): IUserState {\n const val: IUserStatePrv = _userState(name) || {\n name,\n collection: {},\n getProperty: function(this: IUserStatePrv, key: string) {\n return _GetValue(this, key) as T|undefined;\n },\n setProperty: function(this: IUserStatePrv, key: string, value: any|undefined) {\n _SetValue(this, key, value)\n },\n };\n return val as IUserState;\n}\nexport default UserState","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Container\":\"Loading_Container__2tXXd\",\"Text\":\"Loading_Text__3XeS2\",\"ShowOpacity\":\"Loading_ShowOpacity__Y8FsQ\"};","import { ILaunchViewModel } from \"../../components/launch/interface\";\n\n\n\n\nfunction DefaultProps(onDownloadClick?: () => void, onSkipClick?: () => void): ILaunchViewModel {\n return {\n status: {\n text: \"Loading\",\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n fontAlignment: \"center\",\n fontWeight: 300,\n color: '#000',\n visible: false,\n },\n detail: {\n text: \"\",\n fontFamily: 'Gill Sans',\n fontSize: '3vmin',\n fontAlignment: \"center\",\n fontWeight: 300,\n color: '#000',\n visible: false,\n },\n backgroundColor: '#000',\n backgroundImage: {\n url: '',\n mode: 'cover',\n },\n centerImage: {\n url: '',\n mode: 'contain',\n },\n downloadButton: {\n text: {\n text: \"Download\",\n fontFamily: 'Gill Sans',\n fontSize: '8vmin',\n fontAlignment: \"center\",\n fontWeight: 300,\n color: '#fff',\n visible: true,\n },\n visible: false,\n backgroundColor: '#222',\n onClick: onDownloadClick ?? (() => {}),\n },\n skipButton: {\n text: {\n text: \"Skip\",\n fontFamily: 'Gill Sans',\n fontSize: '8vmin',\n fontAlignment: \"center\",\n fontWeight: 300,\n color: '#fff',\n visible: true,\n },\n visible: false,\n backgroundColor: '#222',\n onClick: onSkipClick ?? (() => {}),\n },\n progressBar: {\n progress: 0,\n backgroundColor: '#B7B7B7',\n barColor: '#3BB1DC',\n textColor: '#FFFFFF',\n visible: false,\n }\n \n };\n}\n\nexport default DefaultProps;\n","import { ISession } from \"@workspace/apiservice/src/interface/session\";\nimport { IRouteLaunchArguments } from \"../interface\";\nimport { session } from \"@workspace/apiservice/src\";\nimport { injectLog } from '../../../interface/util';\nimport { IServiceWorkerStatus } from \"../../../interface/serviceworker\";\n\nexport enum ILaunchState {\n Initializing = 0,\n UpdatingSite = 1,\n AwaitingUserDownloadSkipConfirmation = 2,\n DownloadingMedia = 3,\n Completed = 4,\n Halted = 5\n}\n\nexport enum ILaunchEvent {\n None = 0,\n Start = 1,\n FetchingSiteData = 2,\n FetchingUserSettings = 3,\n CheckForServiceWorker = 4,\n AwaitingUserSelectionMediaDownload = 5,\n UserRequestedDownloadingMedia = 6,\n UserRequestedSkipMedia = 7,\n DownloadingMedia = 8,\n Completed = 9,\n Halt = 10,\n}\n\nexport interface IStateProcessorLaunchState {\n session?: ISession;\n swState?: IServiceWorkerStatus;\n updateSiteProgress?: number;\n downloadMediaProgress?: number;\n route: IRouteLaunchArguments;\n}\n\nfunction _start(processor: IStateProcessorPrv): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const workspace = await session(processor.state().route.sessionName);\n\n processor.setState({\n ...processor.state(),\n session: workspace,\n });\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport function _updateSite(processor: IStateProcessorPrv): Promise {\n const log = injectLog();\n\n const canUpdate = navigator.onLine;\n\n if ( !canUpdate ) { return Promise.resolve(); }\n\n const hasContentInDb = async () => {\n try {\n const sites = await processor.state().session?.db?.site().all();\n return sites?.length ?? 0 > 0; \n } catch (error) {\n return false;\n }\n }\n \n return new Promise(async function(resolve, reject) {\n try {\n const promise = processor.state().session?.operation?.updateSite();\n\n if ( !promise ) {\n throw Error(\"No session update promise\");\n }\n\n promise?.onProgress(progress => {\n processor.setState({\n ...processor.state(),\n updateSiteProgress: progress,\n })\n });\n\n promise\n .then(_ => resolve())\n .catch(err => reject(err));\n } catch (error) {\n if ( await hasContentInDb() ) {\n log.warn(`Unable to update: ${error}, allowing skip`);\n resolve();\n } else {\n reject(error);\n }\n } \n })\n}\n\nfunction ProcessEvent(processor: IStateProcessorPrv, event: ILaunchEvent) {\n const log = injectLog();\n\n if ( processor.status() === ILaunchState.Halted ) { return; }\n\n log.info('Processing launch-state event ' + event);\n\n switch (event) {\n case ILaunchEvent.Start:\n _start(processor)\n .then(_ => {\n processor.setStatus(ILaunchState.UpdatingSite);\n ProcessEvent(processor, ILaunchEvent.FetchingSiteData);\n })\n .catch(err => {\n processor.setError(`Failed to fetch site data: ${err}`);\n processor.setStatus(ILaunchState.Halted);\n });\n break;\n\n case ILaunchEvent.FetchingSiteData:\n _updateSite(processor)\n .then(async _ => { \n ProcessEvent(processor, ILaunchEvent.Completed);\n })\n .catch(err => {\n processor.setError(`Failed to fetch site data: ${err}`);\n processor.setStatus(ILaunchState.Halted);\n });\n break;\n\n case ILaunchEvent.Completed:\n processor.setStatus(ILaunchState.Completed);\n break;\n\n case ILaunchEvent.Halt:\n processor.setStatus(ILaunchState.Halted);\n break;\n\n default:\n case ILaunchEvent.None:\n throw Error(`Unsupported event: ${event}`);\n }\n}\n\ntype IStateProcessorCallback = (model: T) => void;\n\nexport interface IStateProcessor {\n status: () => S;\n setStatus: (status: S) => void;\n setError: (error: string) => void;\n error: () => string;\n onStatusChange: (callback: IStateProcessorCallback) => void;\n process: (event: E) => void;\n isRunning: () => void;\n state: () => U;\n setState: (state: U) => void;\n onStateChange: (callback: IStateProcessorCallback) => void;\n}\n\ninterface IStateProcessorPrv extends IStateProcessor {\n _status: ILaunchState,\n _error: string,\n _callbackStatus?: (state: ILaunchState) => void;\n _state: IStateProcessorLaunchState;\n _callbackState?: (model: IStateProcessorLaunchState) => void;\n}\n\nfunction StateProcessor(route: IRouteLaunchArguments): IStateProcessor {\n const manager: IStateProcessorPrv = {\n _status: ILaunchState.Initializing,\n _error: '',\n status: function(this: IStateProcessorPrv) { return this._status; },\n setStatus: function(this: IStateProcessorPrv, status: ILaunchState) { \n this._status = status;\n this._callbackStatus?.(status);\n },\n error: function(this: IStateProcessorPrv) { return this._error; },\n setError: function(this: IStateProcessorPrv, error: string) { \n this._error = error;\n },\n onStatusChange: function(this: IStateProcessorPrv, callback: IStateProcessorCallback) {\n this._callbackStatus = callback;\n },\n process: function(this: IStateProcessorPrv, event: ILaunchEvent) {\n ProcessEvent(this, event);\n },\n isRunning: function(this: IStateProcessorPrv) {\n return this._status !== ILaunchState.Completed;\n },\n _state: {route,},\n state: function(this: IStateProcessorPrv) {\n return this._state;\n },\n setState: function(this: IStateProcessorPrv, state: IStateProcessorLaunchState) {\n this._state = state;\n this._callbackState?.(state);\n },\n onStateChange: function(this: IStateProcessorPrv, callback: IStateProcessorCallback) {\n this._callbackState = callback;\n },\n };\n\n return manager as IStateProcessor;\n}\n\nexport default StateProcessor\n","\nimport { ILaunchViewModel } from \"../../components/launch/interface\";\nimport { IConfigAssets } from \"../../interface/config\";\nimport defaultProps from \"./defaultProps\";\nimport { ILaunchEvent, ILaunchState, IStateProcessor, IStateProcessorLaunchState } from \"./state/events\";\n\nfunction mapping(downloadClick: () => void, skipClick: () => void, assets: IConfigAssets, processor: IStateProcessor): ILaunchViewModel {\n let model: ILaunchViewModel = defaultProps();\n\n model.downloadButton.onClick = downloadClick;\n model.skipButton.onClick = skipClick;\n\n model.status = {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '8vmin',\n fontAlignment: 'center',\n fontWeight: 300,\n color: '#000',\n visible: true,\n }\n\n model.detail = {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '3vmin',\n fontAlignment: 'center',\n fontWeight: 300,\n color: '#000',\n visible: false,\n }\n\n switch ( processor.status() ) {\n default:\n case ILaunchState.Initializing:\n model.progressBar.visible = false;\n model.status.text = \"...Loading\";\n break;\n\n case ILaunchState.UpdatingSite:\n model.progressBar.visible = true;\n model.progressBar.progress = processor.state().updateSiteProgress ?? 0;\n model.status.text = \"...Updating\";\n break;\n\n case ILaunchState.AwaitingUserDownloadSkipConfirmation:\n model.progressBar.visible = false;\n model.progressBar.progress = processor.state().updateSiteProgress ?? 0;\n model.status.text = \"Download all content now?\";\n break;\n\n case ILaunchState.DownloadingMedia:\n model.progressBar.visible = true;\n model.progressBar.progress = processor.state().downloadMediaProgress ?? 0;\n model.status.text = \"...Downloading\";\n break;\n\n case ILaunchState.Halted:\n model.progressBar.visible = false;\n model.status.text = '...Please refresh page';\n model.detail.text = processor.error() ?? '';\n model.detail.visible = true;\n break;\n }\n\n const showingUserDialog = processor.status() === ILaunchState.AwaitingUserDownloadSkipConfirmation;\n\n model.downloadButton.visible = showingUserDialog;\n model.skipButton.visible = showingUserDialog;\n\n model.backgroundColor = assets.pwa.backgroundColor;\n model.status.color = assets.pwa.themeColor;\n model.centerImage.url = assets.pwa.images.icon512;\n\n model.status.visible = true;\n\n return model;\n}\n\nexport default mapping\n\n","\n\n\nimport { Suspense, useEffect, useState, lazy, memo } from 'react';\nimport { ILaunchViewModel } from \"../../components/launch/interface\";\nimport { ILaunchControllerProps, IRouteLaunchArguments } from './interface'\nimport { injectConfigAssets } from '../../interface/config';\nimport mapping from './mapping';\nimport StateProcessor, { ILaunchState, IStateProcessorLaunchState, IStateProcessor, ILaunchEvent } from './state/events';\n\nconst MainView = lazy(() => import('../../components/launch'));\n\ntype IProcessor = IStateProcessor;\n\n\nfunction Render(props: ILaunchControllerProps): JSX.Element {\n const assets = injectConfigAssets();\n \n const [processor, _] = useState(StateProcessor(props.route));\n\n const onDownloadClick = () => processor.process(ILaunchEvent.UserRequestedDownloadingMedia);\n const onSkipClick = () => processor.process(ILaunchEvent.UserRequestedSkipMedia);\n\n const [state, setState] = useState(mapping(onDownloadClick, onSkipClick, assets, processor));\n\n const updateState = () => setState(mapping(onDownloadClick, onSkipClick, assets, processor));\n\n processor.onStateChange(updateState);\n processor.onStatusChange((newStatus) => {\n updateState();\n if ( newStatus !== ILaunchState.Completed ) { return; }\n props.didRequestLanguageSelect();\n })\n\n useEffect(() => {\n processor.process(ILaunchEvent.Start);\n return () => { processor.process(ILaunchEvent.Halt); }\n }, [props.route]);\n\n return (\n \n \n \n );\n}\n\nconst routesEqual = (prev: IRouteLaunchArguments, next: IRouteLaunchArguments) => {\n if ( prev.db !== next.db ) { return false; }\n if ( prev.sessionName !== next.sessionName ) { return false; }\n return true;\n}\n\nconst propsEqual = (prev: ILaunchControllerProps, next: ILaunchControllerProps) => {\n return routesEqual(prev.route, next.route);\n}\n\nexport default memo(Render, propsEqual) as typeof Render\n","\nimport Renderer from './render';\nimport { IRouteLaunchArguments, ILaunchControllerProps } from './interface';\nimport { DataCheckResult, IBaseController } from '../interface';\n\nconst exports: IBaseController = {\n renderer: Renderer,\n canRender: () => Promise.resolve({hasEnoughDataToRender:true}),\n canLoad: () => Promise.resolve(DataCheckResult.DataAvailableOffline),\n}\n\nexport default exports\n","\n\n\nimport { ITourMainProps, ITourItemViewModel } from './interface';\n\nconst dummyItem: ITourItemViewModel = {\n title: {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n lineHeight: '10vmin',\n fontAlignment: 'center',\n fontWeight: 500,\n color: '#000',\n visible: true,\n },\n titleBackgroundColor: '#ddd',\n\n backgroundImage: {\n mode: 'contain',\n url: '',\n },\n backgroundColor: '#fff',\n cornerRadius: 2,\n\n number: {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n lineHeight: '10vmin',\n fontAlignment: 'center',\n fontWeight: 500,\n color: '#ddd',\n visible: true,\n },\n numberBackgroundColor: '#000',\n shouldGrayAfterViewing: true,\n subItems: [],\n\n onClick: (item: ITourItemViewModel) => {},\n};\n\nfunction placeholderData(): ITourMainProps {\n return {\n sideMenu: {\n backgroundColor: '#000',\n foregroundImage: {\n url: '',\n mode: 'contain',\n },\n items: [], \n },\n topBar: {\n title: {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n lineHeight: '10vmin',\n fontAlignment: 'center',\n fontWeight: 500,\n color: '#000000',\n visible: true,\n },\n backgroundColor: '#000',\n iconColor: '#fff',\n },\n \n backgroundColor: '#ffffff',\n backgroundImage: {\n url: '',\n mode: 'contain',\n },\n backButton: {\n backgroundColor: 'transparent',\n strokeColor: 'transparent',\n strokeSize: '0',\n arrowColor: 'transparent',\n visible: false,\n },\n collection: {\n backgroundColor: '#fff',\n backgroundImage: {\n url: '',\n mode: 'contain',\n },\n items: [dummyItem,dummyItem,dummyItem,dummyItem],\n },\n showFloorPlanIcon: false,\n onBack: () => {},\n onFloorPlanSelect: () => {},\n };\n}\n\nexport default placeholderData;","\n\n\nimport { Fragment, Suspense, Dispatch, SetStateAction, useCallback, useState, useEffect, useReducer, lazy, memo } from 'react';\nimport { ITourMainProps } from '../../components/tour/interface';\nimport placeholderData from '../../components/tour/placeholderData';\nimport ISiteObjectDto from '@workspace/apiservice/src/model/SiteObjectDto.if';\nimport { ITourControllerProps, ITourStateActionModifier, ITourType } from './interface';\nimport LoadingView from '../../components/common/Loading';\nimport { injectCacheController, injectLog } from '../../interface/util';\nimport type IMapping from './mapping';\nimport { getProjectOverrides } from '../../interface/overrides';\n\nconst MainView = lazy(() => import('../../components/tour'));\nconst loadMapper = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('./mapping')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n });\n};\n\ninterface ITourController extends ITourMainProps {\n type: ITourType;\n isLoading: boolean;\n}\n\nexport interface ITourControllerActionModifier { \n (model: ITourController): ITourController\n}\n\n/* Same as useState, except 3 return-value allow for partial state updates */\nfunction ReactUseStateWithUpdate(initialState: S | (() => S)): [S, Dispatch>, Dispatch>] {\n const [getVal, setVal] = useState(initialState);\n const updateVal = useCallback((partial: Partial) => setVal((sPrev) => ({...sPrev, ...partial})), []);\n return [getVal, setVal, updateVal]\n}\n\nfunction _StateReducer(state: ITourController, action: ITourControllerActionModifier): ITourController {\n const newState = action(state);\n return newState;\n}\n\nfunction Renderer(props: ITourControllerProps): JSX.Element {\n const log = injectLog();\n\n const [model, modelDispatcher] = useReducer(\n _StateReducer,\n {\n ...placeholderData(),\n type: ITourType.List,\n isLoading: true,\n }\n );\n\n const onSiteObject = useCallback((siteObject: ISiteObjectDto) => { props.didRequestSiteObject(siteObject.id); }, [props.didRequestSiteObject]);\n const onFloorPlan = props.didRequestFloorPlan;\n const onLanguageSelect = props.didRequestLanguageSelect;\n const onTourSelect = props.didRequestTourSelect;\n const onBack = props.didRequestBack;\n const reducer = (modifier: ITourStateActionModifier) => {\n modelDispatcher((modelState: ITourController) => {\n return {\n type: modelState.type,\n isLoading: modelState.isLoading,\n /* apply reducer & pass result to project-overrides before applying */\n ...getProjectOverrides('ITourMainProps', modifier(modelState)),\n };\n });\n };\n\n useEffect(() => {\n log.info(`New route: ${JSON.stringify(props.route)}`);\n loadMapper()\n .then(function(mapper) {\n return mapper(props.route, \n reducer,\n injectCacheController().getAssociatedCache(props) || injectCacheController().getGlobalCache(),\n onSiteObject,\n onFloorPlan,\n onLanguageSelect,\n onTourSelect,\n onBack)\n }) \n .then(([modelResult, type]) => {\n reducer(modelIn => ({\n ...modelIn,\n ...modelResult,\n type, \n isLoading: false\n }));\n })\n .catch(error => {\n log.error(`Failed to map/update tour controller. Error:${JSON.stringify(error)}`);\n props.didRequestBack();\n });\n }, [props.route]);\n\n useEffect(() => {\n document.title = model.topBar.title.text;\n }, [model.topBar.title.text]);\n\n useEffect(() => {\n if ( !model.isLoading ) { \n log.info('Showing Tour controller view');\n }\n }, [model.isLoading]);\n\n return (\n \n \n { !model.isLoading && \n \n \n \n }\n \n );\n}\n\nconst propsEqual = (prev: ITourControllerProps, next: ITourControllerProps) => {\n const match = JSON.stringify(prev.route) === JSON.stringify(next.route); \n return match;\n}\n\nexport default memo(Renderer, propsEqual) as typeof Renderer\n","import { IWorkspaceDB } from '@workspace/apiservice/src/interface/db';\nimport ILanguageDto from '@workspace/apiservice/src/model/LanguageDto.if';\nimport IMediumDto from '@workspace/apiservice/src/model/MediumDto.if';\nimport ISiteObjectDto from '@workspace/apiservice/src/model/SiteObjectDto.if';\nimport { session } from '@workspace/apiservice/src';\nimport { DataCheckResult } from '../interface';\nimport { IRouteTourArguments } from './interface';\nimport { injectLog } from '../../interface/util';\n\nfunction mediaRequired(siteObject: ISiteObjectDto, language: ILanguageDto, db: IWorkspaceDB): Promise> {\n const log = injectLog();\n \n return new Promise(async function(resolve, reject) {\n try {\n let media: IMediumDto[] = [];\n\n const translation = await siteObject.translation(db, language);\n\n if ( translation.mediumId ) {\n media.push(await translation.medium(db));\n }\n\n resolve(media);\n } catch (error) {\n log.error('Failed to map media ' + error);\n reject(error);\n }\n });\n}\n\nfunction NeedsInternet(route: IRouteTourArguments): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const workspace = await session(route.sessionName);\n\n await workspace.db.open();\n\n const language = await workspace.db.language().get(route.languageId);\n const tour = await workspace.db.tour().get(route.tourId);\n\n const tourRelatedSiteObjects = await workspace.db.tourRelatedSiteObject().all();\n const siteObjectIds = tourRelatedSiteObjects.filter(x => x.tourId === tour.id).map(x => x.siteObjectId);\n\n const allSiteObjects = await Promise.all(siteObjectIds.map(x => workspace.db.siteObject().get(x)));\n\n const allRequiredMedia = (await Promise.all(allSiteObjects.map(so => mediaRequired(so, language, workspace.db)))).flat();\n\n const isAllCached = await workspace.media.isAllMediaCached(allRequiredMedia.map(medium => medium.id));\n\n const needsInternet = !isAllCached;\n\n workspace.db.close();\n\n resolve(needsInternet);\n } catch(error) {\n reject(error);\n }\n });\n}\nfunction CanLoad(route: IRouteTourArguments): Promise {\n return new Promise(async function(resolve, reject) {\n const needsInternet = await NeedsInternet(route);\n\n if ( !needsInternet ) { resolve(DataCheckResult.DataAvailableOffline); }\n else { resolve(DataCheckResult.DataNetworkConnectionNeeded); }\n });\n}\n\nexport default CanLoad\n","import { session } from '@workspace/apiservice/src';\nimport { IRouteTourArguments, ISiteObjectSelectControllerRenderResult } from './interface';\n\n\nfunction CanRender(route: IRouteTourArguments): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const workspace = await session(route.sessionName);\n\n await workspace.db.open();\n\n const tour = await workspace.db.tour().get(route.tourId);\n\n const allTourRelatedSiteObjects = await workspace.db.tourRelatedSiteObject().all();\n const matchingTourRelatedSiteObjects = allTourRelatedSiteObjects.filter(x => x.tourId === tour.id);\n\n const hasMultipleSiteObjects = matchingTourRelatedSiteObjects.length > 1;\n \n let result: ISiteObjectSelectControllerRenderResult = {\n hasEnoughDataToRender: hasMultipleSiteObjects\n };\n\n if ( matchingTourRelatedSiteObjects.length <= 0 ) {\n throw Error('‘No site-objects found. Unable to launch tour');\n }\n\n if ( !result.hasEnoughDataToRender ) {\n result = {...result,\n suggestedAlternativeRoute: 'SiteObject',\n additionalRouteDataNeeded: {\n ...route,\n siteObjectId: matchingTourRelatedSiteObjects[0].siteObjectId,\n }\n };\n }\n\n resolve(result);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport default CanRender","import Renderer from './render';\nimport CanLoad from './canLoad';\nimport { IRouteTourArguments, ITourControllerProps } from './interface';\nimport { IBaseController } from '../interface';\nimport CanRender from './canRender';\n\nconst exports: IBaseController = {\n renderer: Renderer,\n canRender: CanRender,\n canLoad: CanLoad,\n}\n\nexport default exports\n","\n\n\nimport { ILanguageSelectViewModel } from './interface';\n\nfunction placeholderData(): ILanguageSelectViewModel {\n return {\n title: {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n fontAlignment: 'center',\n fontWeight: 500,\n visible: true,\n color: '#000000',\n },\n backgroundColor: '#ffffff',\n backgroundImage: {\n url: '',\n mode: 'contain',\n },\n\n items: [],\n };\n}\n\n\n\nexport default placeholderData;","\n\n\nimport { Fragment, Suspense, Dispatch, SetStateAction, useCallback, useState, useEffect, memo, lazy } from 'react';\nimport { ILanguageSelectControllerModel, ILanguageSelectControllerProps, ILanguageSelectType } from './interface'\nimport modelPlaceholderData from '../../components/languageselect/placeholderData'\nimport LoadingView from '../../components/common/Loading';\nimport type ILanguageDto from '@workspace/apiservice/src/model/LanguageDto.if';\nimport type IMapping from \"./mapping\";\nimport { injectLog } from '../../interface/util';\nimport { ILanguageSelectViewModel } from '../../components/languageselect/interface';\nimport { getProjectOverrides } from '../../interface/overrides';\nconst isEqual = require(\"react-fast-compare\");\nconst MainView = lazy(() => import('../../components/languageselect'));\nconst loadMapper = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('./mapping')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n });\n};\n\n\ninterface ILanguageSelectController {\n model: ILanguageSelectControllerModel;\n type: ILanguageSelectType;\n titleCyclerTimeout: ReturnType | null;\n isLoading: boolean;\n}\n\nconst controllerPlaceholderData = (): ILanguageSelectController => ({\n model: {\n ...modelPlaceholderData(),\n cycler: null,\n activeTitle: () => '',\n nextTitle: () => '',\n delayBetweenChangingTitle: -1,\n \n },\n type: ILanguageSelectType.List,\n titleCyclerTimeout: null,\n isLoading: true,\n})\n\n/* Same as useState, except 3 return-value allow for partial state updates */\nfunction ReactUseStateWithUpdate(initialState: S | (() => S)): [S, Dispatch>, Dispatch>] {\n const [getVal, setVal] = useState(initialState);\n const updateVal = useCallback((partial: Partial) => setVal((sPrev) => ({...sPrev, ...partial})), []);\n return [getVal, setVal, updateVal]\n}\n\nfunction View(props: ILanguageSelectControllerProps): JSX.Element {\n const log = injectLog();\n\n const [state, setState, updateState] = ReactUseStateWithUpdate(controllerPlaceholderData())\n\n const onLanguageSelect = useCallback((language: ILanguageDto) => props.didRequestTourSelect(language.id), [props.didRequestTourSelect]);\n\n const setupUpdates = (delayBetweenChangingTitle: number = -1) => {\n if ( state.titleCyclerTimeout ) {\n clearInterval(state.titleCyclerTimeout);\n }\n\n if ( delayBetweenChangingTitle > 0 ) {\n const titleCyclerTimeout = setInterval(_ => {\n log.verbose('Updating LS title, old:' + state.model.title.text);\n setState(stateIn => {\n const stateOut: ILanguageSelectController = {...stateIn};\n stateOut.model = {...stateIn.model};\n stateOut.model.title = {...stateIn.model.title};\n stateOut.model.title.text = stateIn.model.nextTitle() || stateIn.model.title.text;\n return stateOut;\n });\n }, delayBetweenChangingTitle);\n \n updateState({titleCyclerTimeout,})\n } \n }\n\n const clearUpdates = () => {\n log.verbose('Clearing up resources');\n if ( state.titleCyclerTimeout ) {\n clearInterval(state.titleCyclerTimeout);\n }\n updateState({ titleCyclerTimeout: null })\n };\n\n useEffect(() => {\n clearUpdates();\n loadMapper()\n .then(function(mapper) {\n return mapper(props.route, onLanguageSelect);\n }) \n .then(function([model, type]) {\n updateState({\n model: getProjectOverrides('ILanguageSelectViewModel', model),\n type,\n isLoading: false,\n });\n setupUpdates(model.delayBetweenChangingTitle);\n })\n .then(_ => log.info('Loaded LanguageSelect'))\n .catch(error => log.error(`Failed to load LanguageSelect ${error}`));\n\n return () => { clearUpdates(); };\n }, [props.route])\n\n useEffect(() => {\n document.title = state.model.title.text;\n }, [state.model.title.text]);\n\n return (\n \n \n \n { !state.isLoading && }\n \n \n );\n}\n\nfunction propsEqual(prev: ILanguageSelectControllerProps, next: ILanguageSelectControllerProps): boolean {\n const match = isEqual(prev, next);\n return match;\n}\n\nexport default memo(View, propsEqual) as typeof View;\n","\nimport { session } from \"@workspace/apiservice/src\";\nimport { ILanguageSelectControllerRenderResult, IRouteLanguageSelectArguments } from \"./interface\";\n\n\nfunction CanRender(route: IRouteLanguageSelectArguments): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const workspace = await session(route.sessionName);\n\n await workspace.db.open();\n\n const languages = await workspace.db.language().all();\n\n const hasMultipleLanguages = languages.length > 1;\n\n let result: ILanguageSelectControllerRenderResult = {\n hasEnoughDataToRender: hasMultipleLanguages\n }\n\n if ( languages.length <= 0 ) {\n throw Error('No languages found, unable to launch language-select, or tour-select');\n }\n\n if ( !result.hasEnoughDataToRender ) {\n result = {...result,\n suggestedAlternativeRoute: 'TourSelect',\n additionalRouteDataNeeded: {\n language: languages[0],\n }\n };\n }\n\n resolve(result);\n } catch (error) {\n reject(error);\n }\n })\n}\n\nexport default CanRender\n","\nimport Renderer from './render';\nimport CanRender from './canRender';\nimport { IRouteLanguageSelectArguments, ILanguageSelectControllerProps } from './interface';\nimport { DataCheckResult, IBaseController } from '../interface';\n\nconst exports: IBaseController = {\n renderer: Renderer,\n canRender: CanRender,\n canLoad: () => Promise.resolve(DataCheckResult.DataAvailableOffline),\n}\n\nexport default exports\n","\n\n\nimport { ITourSelectViewModel } from './interface';\n\nfunction placeholderData(): ITourSelectViewModel {\n return {\n title: {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n fontAlignment: 'center',\n fontWeight: 500,\n color: '#000000',\n visible: true,\n opacity: 0,\n },\n backgroundColor: '#ffffff',\n backgroundImage: {\n url: '',\n mode: 'contain',\n },\n\n backButton: {\n backgroundColor: '#fff',\n strokeColor: '#000',\n strokeSize: '0.6vmin',\n arrowColor: '#000',\n visible: false,\n },\n\n onBack: () => {},\n\n items: [],\n };\n}\n\nexport default placeholderData;","\n\nimport { Fragment, Suspense, useState, useCallback, useEffect, lazy, memo } from 'react';\nimport { ITourSelectControllerModel, ITourSelectControllerProps, ITourSelectType } from './interface';\nimport modelPlaceholderData from '../../components/tourselect/placeholderData';\nimport ITourDto from '@workspace/apiservice/src/model/TourDto.if';\nimport LoadingView from '../../components/common/Loading';\nimport type IMapping from \"./mapping\";\nimport { injectLog } from '../../interface/util';\nimport { ITourSelectViewModel } from '../../components/tourselect/interface';\nimport { getProjectOverrides } from '../../interface/overrides';\nconst isEqual = require(\"react-fast-compare\");\nconst MainView = lazy(() => import('../../components/tourselect'));\nconst loadMapper = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('./mapping')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n });\n};\n\n/* max draw offset at which it is still visible during scrolling */\nconst TOPBAR_TEXT_OPACITY_MAX_OFFSET = 120;\n\ninterface ITourSelectController {\n model: ITourSelectControllerModel;\n type: ITourSelectType;\n isLoading: boolean;\n}\n\nconst controllerPlaceholderData = (): ITourSelectController => ({\n model: {\n ...modelPlaceholderData(),\n },\n type: ITourSelectType.List,\n isLoading: true,\n});\n\nfunction View(props: ITourSelectControllerProps): JSX.Element {\n const log = injectLog();\n\n const [state, setState] = useState(controllerPlaceholderData());\n\n const onTourSelect = useCallback((tour: ITourDto) => props.didRequestTour(tour.id), [props.didRequestTour]);\n\n const onScroll = (position: {left: number, top: number}) => {\n const newOpacityPC = 1 - (Math.min(Math.max(position.top, 0), TOPBAR_TEXT_OPACITY_MAX_OFFSET) / TOPBAR_TEXT_OPACITY_MAX_OFFSET);\n setState(stateIn => ({\n ...stateIn,\n model: {\n ...stateIn.model,\n title: {\n ...stateIn.model.title,\n opacity: newOpacityPC,\n },\n }\n }))\n };\n\n useEffect(() => {\n loadMapper()\n .then(mapper => mapper(props.route, props.didRequestBack, onTourSelect, onScroll))\n .then(function([model, type]) {\n return setState(({\n model: getProjectOverrides('ITourSelectViewModel', model),\n type,\n isLoading: false,\n }));\n })\n .then(_ => log.info('Loaded TourSelect'))\n .catch(error => log.error(`Failed to load TourSelect ${error}`));\n }, [props.route]);\n \n useEffect(() => {\n document.title = state.model.title.text;\n }, [state.model.title.text]);\n\n return (\n \n \n \n { !state.isLoading && }\n \n \n );\n}\n\nfunction propsEqual(prev: ITourSelectControllerProps, next: ITourSelectControllerProps): boolean {\n const match = isEqual(prev, next);\n return match;\n}\n\nexport default memo(View, propsEqual) as typeof View;\n\n\n","\nimport { session, util } from \"@workspace/apiservice/src\";\nimport { IRouteTourSelectArguments, ITourSelectControllerRenderResult } from \"./interface\";\n\n\nfunction CanRender(route: IRouteTourSelectArguments): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const workspace = await session(route.sessionName);\n\n await workspace.db.open();\n\n const language = await workspace.db.language().get(route.languageId ?? 0);\n\n const tours = await util.tours.ToursForLanguage(workspace.db, language);\n\n const hasMultipleTours = tours.length > 1;\n\n let result: ITourSelectControllerRenderResult = {\n hasEnoughDataToRender: hasMultipleTours\n }\n\n if ( tours.length <= 0 ) {\n throw Error('No tours found, unable to launch tour-select, or tour menu');\n }\n\n if ( !result.hasEnoughDataToRender ) {\n result = {...result,\n suggestedAlternativeRoute: 'Tour',\n additionalRouteDataNeeded: {\n tour: tours[0],\n }\n };\n }\n resolve(result);\n } catch (error) {\n reject(error);\n }\n })\n}\n\nexport default CanRender","\nimport Renderer from './render';\nimport CanRender from './canRender';\nimport { IRouteTourSelectArguments, ITourSelectControllerProps } from './interface';\nimport { DataCheckResult, IBaseController } from '../interface';\n\nconst exports: IBaseController = {\n renderer: Renderer,\n canRender: CanRender,\n canLoad: () => Promise.resolve(DataCheckResult.DataAvailableOffline),\n}\n\nexport default exports\n","import { IFloorplanViewModel } from \"../../components/floorplan/interface\";\n\nfunction data(): IFloorplanViewModel {\n return {\n backgroundColor: 'transparent',\n title: {\n text: '',\n fontFamily: 'Gill Sans',\n fontSize: '10vmin',\n fontAlignment: \"center\",\n fontWeight: 500,\n color: 'transparent',\n visible: false,\n },\n imageUrl: '',\n startX: 0,\n startY: 0,\n maxZoom: 0,\n minZoom: 1,\n startZoom: 1,\n \n items: [],\n\n backButton: {\n backgroundColor: 'transparent',\n strokeColor: 'transparent',\n strokeSize: 0,\n arrowColor: 'transparent',\n },\n \n onBack: ()=>{},\n }\n}\n\nexport default data;\n","\n\n\nimport { Fragment, Suspense, useEffect, useState, useCallback, lazy, memo, Dispatch, SetStateAction } from 'react';\nimport { IFloorplanViewModel } from '../../components/floorplan/interface';\nimport { IFloorplanControllerProps } from './interface'\nimport modelPlaceholderData from './placeholderData';\nimport LoadingView from '../../components/common/Loading';\nimport type IMapping from \"./mapping\";\nimport { injectENV, injectLog } from '../../interface/util';\nimport { getProjectOverrides } from '../../interface/overrides';\n\nconst MainView = lazy(() => import('../../components/floorplan'));\nconst loadMapper = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('./mapping')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n });\n};\ninterface IFloorplanController {\n model: IFloorplanViewModel;\n isLoading: boolean;\n}\n\nconst controllerPlaceholderData = (): IFloorplanController => ({\n model: {\n ...modelPlaceholderData(),\n },\n isLoading: true,\n})\n\n/* Same as useState, except 3 return-value allow for partial state updates */\nfunction ReactUseStateWithUpdate(initialState: S | (() => S)): [S, Dispatch>, Dispatch>] {\n const [getVal, setVal] = useState(initialState);\n const updateVal = useCallback((partial: Partial) => setVal((sPrev) => ({...sPrev, ...partial})), []);\n return [getVal, setVal, updateVal]\n}\n\nfunction Render(props: IFloorplanControllerProps): JSX.Element {\n const log = injectLog();\n\n const [state, _, updateState] = ReactUseStateWithUpdate(controllerPlaceholderData())\n\n const onBack = props.onRequestBack;\n const onSiteObject = useCallback((siteObjectId: number) => props.onRequestSiteObject(siteObjectId), [props.onRequestSiteObject]);\n\n useEffect(() => {\n loadMapper()\n .then(mapper => mapper(props.route, onSiteObject, onBack)) \n .then(model => \n updateState({model: getProjectOverrides('IFloorplanViewModel', model), isLoading:false})\n )\n .then(_ => log.info('Loaded Floorplan'))\n .catch(error => log.error(`Failed to load Floorplan ${error}`));\n }, [onBack, onSiteObject, props.route])\n\n useEffect(() => {\n document.title = state.model.title.text;\n }, [state.model.title.text]);\n\n return (\n \n \n \n \n \n \n );\n}\n\nconst propsEqual = (prev: IFloorplanControllerProps, next: IFloorplanControllerProps) => {\n return JSON.stringify(prev.route) === JSON.stringify(next.route);\n}\n\nexport default memo(Render, propsEqual) as typeof Render\n","\nimport Renderer from './render';\nimport { IRouteFloorplanArguments, IFloorplanControllerProps } from './interface';\nimport { DataCheckResult, IBaseController } from '../interface';\n\n\nconst exports: IBaseController = {\n renderer: Renderer,\n canRender: () => Promise.resolve({hasEnoughDataToRender: true}),\n canLoad: () => Promise.resolve(DataCheckResult.DataAvailableOffline),\n}\n\nexport default exports\n","import { IEnv } from \"../interface/util\";\n\nexport enum IConfigLogLevel {\n Undef = 0,\n Milestone = 1,\n Trace = 2,\n Verbose = 3,\n Info = 4,\n Warn = 5,\n Error = 6,\n Fatal = 7,\n LastValue = 8,\n}\n\nexport enum IConfigLogDestination {\n Undef = 0,\n Console = 1,\n Remote_ApplicationInsights = 2,\n LastValue = 3,\n}\n\nexport interface IConfigLogSettings {\n authorizationKey?: string;\n}\n\nexport interface IConfigLog {\n loggingLevelsEnabled: Array;\n outputDestinations: Array;\n outputConfiguration: Record;\n}\n\n\nconst DEFAULTS = {\n LOGGINGLEVELSENABLED: [IConfigLogLevel.Trace, IConfigLogLevel.Info, IConfigLogLevel.Warn, IConfigLogLevel.Error, IConfigLogLevel.Fatal, ],\n OUTPUTDESTINATIONS: [IConfigLogDestination.Console],\n OUTPUTCONFIGURATION: {\n [IConfigLogDestination.Console]: {},\n [IConfigLogDestination.Remote_ApplicationInsights]: {},\n }\n}\n\nfunction config(env: IEnv): IConfigLog {\n const config: IConfigLog = {\n loggingLevelsEnabled: env.getValueWithDefault>('REACT_APP_LOG_LEVELS', DEFAULTS.LOGGINGLEVELSENABLED),\n outputDestinations: env.getValueWithDefault>('REACT_APP_LOG_DESTINATIONS', DEFAULTS.OUTPUTDESTINATIONS),\n outputConfiguration: env.getValueWithDefault>('REACT_APP_LOG_SETTINGS', DEFAULTS.OUTPUTCONFIGURATION),\n }\n\n return config;\n}\n\nexport default config\n","\nimport { injectENV, injectFetch } from '../interface/util';\nimport api from './api';\nimport asset from './asset';\nimport cache from './cache';\nimport route from './routes';\nimport log from './log';\nimport { bindConfigLog, bindConfigAPI, bindConfigAssets, bindConfigCache, bindConfigRoute, injectConfigRoute } from \"../interface/config\";\nimport { IContainer } from '../interface/container';\n\nfunction _bindLog(container: IContainer): Promise {\n const env = injectENV(container);\n const config = log(env);\n bindConfigLog(config, container);\n return Promise.resolve();\n}\n\nfunction _bindAPI(container: IContainer): Promise {\n const env = injectENV(container);\n const config = api(env);\n bindConfigAPI(config);\n return Promise.resolve();\n}\n\nfunction _bindAsset(container: IContainer): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const fetcher = await injectFetch(container);\n const routeConfig = injectConfigRoute(container);\n const val = await asset(fetcher, routeConfig);\n bindConfigAssets(val, container);\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _bindCache(container: IContainer): Promise {\n bindConfigCache(cache, container);\n return Promise.resolve();\n}\n\nfunction _bindRoute(container: IContainer): Promise {\n const env = injectENV(container);\n const bindVal = route(env)\n bindConfigRoute(bindVal, container);\n return Promise.resolve();\n}\n\nexport function bind(container: IContainer): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const binders: Array<(container: IContainer) => Promise> = [_bindLog, _bindAPI, _bindCache, _bindRoute, _bindAsset];\n\n for ( const binder of binders ) {\n await binder(container);\n }\n\n resolve();\n } catch (error) {\n console.error(`bind error: ${JSON.stringify(error)}`);\n reject(error);\n }\n });\n}\n\n","import { ICache } from \"../interface/util\";\n\ninterface ICachePrv extends ICache {\n store: {};\n}\n\nfunction Cache(): ICache {\n const val: ICachePrv = {\n store: {},\n add: function(this: ICachePrv, key: string|symbol, value: any): void {\n (this.store as any)[key] = value\n },\n get: function(this: ICachePrv, key: string|symbol): any {\n return (this.store as any)[key];\n },\n };\n\n return val as ICache;\n}\n\nexport default Cache\n","import { ICache, ICacheController } from \"../interface/util\";\nimport Cache from './cache';\n\nconst kCacheKey = '__cache';\n\nfunction _get(associatedObject: any): ICache|null {\n if ( !Object.isExtensible(associatedObject) ) { return null; }\n\n const keySearch: symbol = Symbol.for(kCacheKey);\n const cacheExisting = (associatedObject as any)[keySearch];\n const cache = cacheExisting || Cache();\n\n (associatedObject as any)[keySearch] = cache;\n\n return cache\n}\n\nfunction CacheController(): ICacheController {\n const globalCacheObj = Cache();\n\n const controller: ICacheController = {\n getAssociatedCache: _get,\n getGlobalCache: () => globalCacheObj,\n };\n\n return controller;\n}\n\nexport default CacheController;\n","\nimport { IEnv } from \"../interface/util\";\n\nfunction _getProcessEnv(envName: string): T|null {\n return (process.env as any)[envName] as T|null\n}\n\nfunction _getWindowEnv(envName: string): T|null {\n if ( window === undefined ) { return null; }\n if ( (window as any).ENV === undefined ) { return null; }\n const envObj = (window as any).ENV as any\n const val = envObj[envName] as T|null;\n return val; \n}\n\nfunction getValue(envName: string): T|null {\n const isDev = (!process.env.NODE_ENV || process.env.NODE_ENV === 'development');\n\n const value: T|null = \n (isDev && _getProcessEnv(envName)) ||\n _getWindowEnv(envName);\n\n return value;\n}\n\nfunction getValueWithDefault(envName: string, defaultValue: T): T {\n return getValue(envName) || defaultValue;\n}\n\nfunction getNumber(name: string, defaultValue: number = -1): number {\n return getValue(name) ?? defaultValue;\n}\n\nfunction getBoolean(name: string, defaultValue: boolean = false): boolean {\n return getValue(name) ?? defaultValue;\n}\n\nfunction getString(name: string, defaultValue: string = \"\"): string {\n return getValue(name) ?? defaultValue;\n}\n\nconst exports: IEnv = {\n getValue,\n getValueWithDefault,\n getNumber,\n getBoolean,\n getString,\n}\n\nexport default exports;\n","\nexport enum LOG_LEVEL {\n MILESTONE = 1,\n TRACE = 2,\n VERBOSE = 3,\n INFO = 4,\n WARN = 5,\n ERROR = 6,\n FATAL = 7,\n};\n\nexport interface ILogger {\n log: (logLevel: LOG_LEVEL, message: string) => void;\n}\n\n// settings: IConfigLogSettings, ","\nimport { IConfigLogSettings } from '../interface/config';\nimport { ILogger, LOG_LEVEL } from './log.if';\n\nfunction _consoleLog(logLevel: LOG_LEVEL, message: string) {\n switch (logLevel) {\n case LOG_LEVEL.MILESTONE:\n console.info(message);\n break;\n\n case LOG_LEVEL.TRACE:\n case LOG_LEVEL.VERBOSE:\n console.debug(message);\n break;\n\n case LOG_LEVEL.INFO:\n console.log(message);\n break;\n \n case LOG_LEVEL.WARN:\n console.warn(message);\n break;\n\n default:\n case LOG_LEVEL.ERROR:\n case LOG_LEVEL.FATAL:\n console.error(message);\n break;\n }\n}\n\nfunction logger(levels: Array, settings: IConfigLogSettings): ILogger {\n const logger: ILogger = {\n log: (level, msg) => _consoleLog(level, msg),\n };\n\n return logger;\n}\n\nexport default logger\n","import { IApplicationInsights, SeverityLevel } from '@microsoft/applicationinsights-web';\nimport type { IConfigLogSettings } from '../interface/config';\nimport { LOG_LEVEL, ILogger } from './log.if';\n\nconst _levelToApplicationInsightsLevel: Record = {\n [LOG_LEVEL.MILESTONE]: SeverityLevel.Information,\n [LOG_LEVEL.TRACE]: SeverityLevel.Verbose,\n [LOG_LEVEL.VERBOSE]: SeverityLevel.Verbose,\n [LOG_LEVEL.INFO]: SeverityLevel.Information,\n [LOG_LEVEL.WARN]: SeverityLevel.Warning,\n [LOG_LEVEL.ERROR]: SeverityLevel.Error,\n [LOG_LEVEL.FATAL]: SeverityLevel.Critical,\n};\n\nfunction _applicationInsightsLog(logLevel: LOG_LEVEL, logger: IApplicationInsights|null, message: string) {\n if ( !logger ) { return; }\n\n switch (logLevel) {\n case LOG_LEVEL.MILESTONE:\n case LOG_LEVEL.VERBOSE:\n case LOG_LEVEL.TRACE:\n case LOG_LEVEL.INFO:\n case LOG_LEVEL.WARN:\n logger.trackTrace({message, severityLevel: _levelToApplicationInsightsLevel[logLevel]})\n break;\n\n default:\n case LOG_LEVEL.ERROR:\n case LOG_LEVEL.FATAL:\n logger.trackException({\n exception: new Error(message),\n severityLevel: _levelToApplicationInsightsLevel[logLevel]\n });\n break;\n }\n}\n\nfunction _setupAILogger(levels: Array, settings: IConfigLogSettings ): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const debugLogEnabled = \n levels.includes(LOG_LEVEL.MILESTONE) || \n levels.includes(LOG_LEVEL.VERBOSE) || \n levels.includes(LOG_LEVEL.INFO);\n const warnLogEnabled = levels.includes(LOG_LEVEL.WARN);\n const loggingLevel = 1 + (debugLogEnabled||warnLogEnabled ? 1 : 0); /* 1=Critical, 2=Warn+Others */\n const aiPackage = await import('@microsoft/applicationinsights-web');\n \n const logger = new aiPackage.ApplicationInsights({\n config: {\n instrumentationKey: settings.authorizationKey,\n enableAutoRouteTracking: true,\n loggingLevelTelemetry: loggingLevel,\n loggingLevelConsole: loggingLevel,\n namePrefix: `${settings.name ?? 'ai-logger'}-`,\n ...settings,\n }\n });\n\n logger.loadAppInsights();\n\n resolve(logger);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction logger(levels: Array, settings: IConfigLogSettings): ILogger {\n let remoteAILogger: IApplicationInsights|null = null;\n\n _setupAILogger(levels, settings)\n .then(logger => remoteAILogger = logger)\n .catch(error => console.error(`Failed to get AI logger: ${error}`));\n \n const logger: ILogger = {\n log: (level, msg) => _applicationInsightsLog(level, remoteAILogger, msg),\n };\n\n return logger;\n}\n\nexport default logger\n","\nimport { IConfigLog, IConfigLogDestination, IConfigLogLevel, injectConfigLog } from \"../interface/config\";\nimport { ILog } from \"../interface/util\";\nimport consoleLoggerInstantiator from './log.console';\nimport aiLoggerInstantiator from './log.ai';\nimport { ILogger, LOG_LEVEL } from './log.if';\n\n/* IConfigLogLevel & LOG_LEVEL have same enum values, just cast */\nconst LogLevelToConfigLogLevel = (level: LOG_LEVEL): IConfigLogLevel => { return level as number; };\nconst ConfigLogLevelsToLogLevels = (level: IConfigLogLevel[]): LOG_LEVEL[] => { return level as number[]; };\n\nfunction _isLogLevelEnabled(config: IConfigLog | Array, logLevel: LOG_LEVEL): boolean {\n if ( Array.isArray(config) ) {\n const configArr = config as Array;\n return configArr.includes(LogLevelToConfigLogLevel(logLevel));\n } else {\n const configObj = config as IConfigLog;\n return configObj.loggingLevelsEnabled.includes(LogLevelToConfigLogLevel(logLevel));\n }\n}\n\n\nfunction logger(config: IConfigLog): ILog {\n const loggers: Array = [];\n\n const consoleLogEnabled = config.outputDestinations.includes(IConfigLogDestination.Console);\n const consoleConfig = config.outputConfiguration[IConfigLogDestination.Console] ?? {};\n if ( consoleLogEnabled ) {\n loggers.push(consoleLoggerInstantiator(ConfigLogLevelsToLogLevels(config.loggingLevelsEnabled), consoleConfig));\n }\n\n const remoteAIEnabled = config.outputDestinations.includes(IConfigLogDestination.Remote_ApplicationInsights);\n const remoteAIConfig = config.outputConfiguration[IConfigLogDestination.Remote_ApplicationInsights] ?? {};\n if ( remoteAIEnabled ) {\n loggers.push(aiLoggerInstantiator(ConfigLogLevelsToLogLevels(config.loggingLevelsEnabled), remoteAIConfig));\n }\n\n function log(logLevel: LOG_LEVEL, message: string) {\n for ( let i=0; i log(LOG_LEVEL.MILESTONE, msg);\n const verbose = (msg: any) => log(LOG_LEVEL.VERBOSE, msg);\n const trace = (msg: any) => log(LOG_LEVEL.TRACE, msg);\n const info = (msg: any) => log(LOG_LEVEL.INFO, msg);\n const warn = (msg: any) => log(LOG_LEVEL.WARN, msg);\n const warning = (msg: any) => log(LOG_LEVEL.WARN, msg);\n const error = (msg: any) => log(LOG_LEVEL.ERROR, msg);\n const fatal = (msg: any) => log(LOG_LEVEL.FATAL, msg);\n const noop = (_: any) => {};\n\n const exports: ILog = {\n milestone: _isLogLevelEnabled(config, LOG_LEVEL.MILESTONE) ? milestone : noop, \n verbose: _isLogLevelEnabled(config, LOG_LEVEL.VERBOSE) ? verbose : noop,\n trace: _isLogLevelEnabled(config, LOG_LEVEL.TRACE) ? trace : noop,\n info: _isLogLevelEnabled(config, LOG_LEVEL.INFO) ? info : noop,\n warn: _isLogLevelEnabled(config, LOG_LEVEL.WARN) ? warn : noop,\n warning: _isLogLevelEnabled(config, LOG_LEVEL.WARN) ? warning : noop,\n error: _isLogLevelEnabled(config, LOG_LEVEL.ERROR) ? error : noop,\n fatal: _isLogLevelEnabled(config, LOG_LEVEL.FATAL) ? fatal : noop,\n };\n\n return exports;\n}\n\n/* At time of binding IConfigLog is not available, as the utils are binded first, before the config files. This should be refactored to remove the injectConfigLog() call below */\nfunction lazy_logger(): ILog {\n let log: ILog|null = null;\n\n function instantiateLogger() {\n if ( !log ) {\n log = logger(injectConfigLog());\n }\n }\n\n const milestone = (msg: any) => { instantiateLogger(); log?.milestone?.(msg); };\n const verbose = (msg: any) => { instantiateLogger(); log?.verbose(msg); };\n const trace = (msg: any) => { instantiateLogger(); log?.trace(msg); };\n const info = (msg: any) => { instantiateLogger(); log?.info(msg); };\n const warn = (msg: any) => { instantiateLogger(); log?.warn(msg); };\n const warning = (msg: any) => { instantiateLogger(); log?.warning(msg); };\n const error = (msg: any) => { instantiateLogger(); log?.error(msg); };\n const fatal = (msg: any) => { instantiateLogger(); log?.fatal(msg); };\n\n const exports: ILog = {\n milestone,\n verbose,\n trace,\n info,\n warn,\n warning,\n error,\n fatal,\n };\n\n return exports;\n}\n\nexport default lazy_logger\n","\n\n\nimport { IQueryURL } from \"../interface/util\";\n\nfunction parse(queryString: string): Record {\n let query: Record = {};\n\n const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\n\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i].split('=');\n const k = decodeURIComponent(pair[0]);\n const v: any = decodeURIComponent(pair[1]) ?? '';\n query[k] = v;\n }\n return query;\n}\n\nfunction assemble(queryArgs: {}): string {\n let strPairs: Array = [];\n\n for ( const key in queryArgs) {\n const value = (queryArgs as any)[key];\n const encodedStr = encodeURIComponent(key) + '=' + encodeURIComponent(value);\n strPairs.push(encodedStr);\n }\n\n return '?' + strPairs.join('&')\n}\n\nconst exports: IQueryURL = {\n parse,\n assemble,\n}\n\nexport default exports","\nimport { IContainer } from '../interface/container';\nimport { bindKVStorage, bindBrowser, bindCache, bindCacheController, bindTranslationStorage, IZip, IFetcher, IKVStorage, IBrowser, ITranslationStorage, injectENV } from '../interface/util';\n\nimport { bindENV, bindFetch, bindLog, bindQueryURL, bindZip } from '../interface/util';\n\n/* static-imports, no code-splitting */\nimport cache from './cache';\nimport cacheController from './cachecontroller';\nimport env from './env';\nimport log from './log';\nimport query from './querystring';\n\n\nfunction _bindENV(container: IContainer) {\n bindENV(env, container);\n}\n\nfunction _bindFetch(container: IContainer) {\n let val: IFetcher|null = null;\n\n const resolver = () => {\n return new Promise(async function(resolve, reject) {\n let rejection = null;\n\n try {\n if ( !val ) {\n val = (await import('./fetch')).default;\n }\n } catch (error) {\n rejection = error;\n }\n\n if ( val ) { resolve(val); }\n else { console.error('Fetch failed'); reject(rejection || 'Import failed for fetcher'); }\n });\n }\n\n bindFetch(resolver, container);\n}\n\nfunction _bindLog(container: IContainer ) {\n bindLog(log(), container);\n}\n\nfunction _bindQueryString(container: IContainer ) {\n bindQueryURL(query, container);\n}\n\nfunction _bindZip(container: IContainer) {\n let val: IZip|null = null;\n\n const resolver = () => {\n return new Promise(async function(resolve, reject) {\n let rejection = null;\n\n try {\n if ( !val ) {\n val = (await import('./zip')).default;\n }\n } catch (error) {\n rejection = error;\n }\n\n if ( val ) { resolve(val); }\n else { reject(rejection || 'Import failed for zip'); }\n });\n }\n\n bindZip(resolver, container);\n}\n\nfunction _bindKVStorage(container: IContainer) {\n let val: IKVStorage|null = null;\n\n const resolver = () => {\n return new Promise(async function(resolve, reject) {\n let rejection = null;\n\n try {\n if ( !val ) {\n val = (await import('./kvstorage')).default();\n }\n } catch (error) {\n rejection = error;\n }\n\n if ( val ) { resolve(val); }\n else { reject(rejection || 'Import failed for kvstorage'); }\n });\n }\n\n bindKVStorage(resolver, container);\n}\n\nfunction _bindBrowser(container: IContainer) {\n let val: IBrowser|null = null\n\n const resolver = () => {\n return new Promise(async function(resolve, reject) {\n let rejection = null;\n\n try {\n if ( !val ) {\n val = (await import('./browser')).default();\n }\n } catch (error) {\n rejection = error;\n }\n\n if ( val ) { resolve(val); }\n else { reject(rejection || 'Import failed for browser'); }\n });\n }\n\n bindBrowser(resolver, container);\n}\n\nfunction _bindCache(container: IContainer) {\n bindCache(cache(), container);\n}\n\nfunction _bindCacheController(container: IContainer) {\n bindCacheController(cacheController(), container);\n}\n\nfunction _bindTranslationStorage(container: IContainer) {\n let val: ITranslationStorage|null = null\n\n const resolver = () => {\n return new Promise(async function(resolve, reject) {\n let rejection = null;\n\n try {\n if ( !val ) {\n const envLoad = injectENV(container);\n val = (await import('./translationstorage')).default(envLoad);\n }\n } catch (error) {\n rejection = error;\n }\n\n if ( val ) { resolve(val); }\n else { reject(rejection || 'Import failed for translation-storage'); }\n });\n }\n\n bindTranslationStorage(resolver, container); \n}\n\nexport function bind(container: IContainer): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const binders = [_bindENV, _bindFetch, _bindLog, _bindQueryString, _bindZip, _bindKVStorage, _bindBrowser, _bindCache, _bindCacheController, _bindTranslationStorage];\n\n for ( const binder of binders ) {\n binder.call(null, container);\n }\n\n resolve();\n } catch (error) {\n reject(error || 'Unknown error binding utils');\n }\n })\n}\n","\nimport type { ComponentType } from 'react';\nimport { RouteComponentProps } from \"react-router-dom\";\nimport { History } from 'history';\nimport { IContainer, injectContainer } from \"./container\";\n\nexport interface IRouteComponentProps {\n history: any,\n location: any,\n match: any,\n}\n\nexport interface IRouteActionResult {\n didLaunchAction: boolean;\n alternativeRouteRequested?: IRouteName,\n alternativeRoutePayload?: any;\n}\n\nexport interface IRoute {\n paths: string[];\n push: (history: History, props: T) => Promise;\n replace: (history: History, props: T) => Promise;\n component: ComponentType>;\n}\n\nexport interface IRouteComponentProps {\n history: any,\n location: any,\n match: any,\n}\n\nexport enum IRouteName {\n Launch = \"Launch\",\n LanguageSelect = \"LanguageSelect\",\n TourSelect = \"TourSelect\",\n Tour = \"Tour\",\n SiteObject = \"SiteObject\",\n FloorPlan = \"FloorPlan\",\n}\n\nexport interface IRouter {\n push: (name: IRouteName, history: any, args: any, options?: {replace?: boolean}) => void;\n popTo: (name: IRouteName, history: any, args: any) => boolean;\n pop: (history: any, args: any) => boolean;\n popCount: (num: number, history: any, args: any) => boolean;\n allRoutes: () => Array>;\n}\n\nconst TYPES = {\n IRouter: Symbol.for(\"IRouter\"),\n}\n\nexport function injectRouter(container: IContainer = injectContainer()): IRouter {\n return container.get(TYPES.IRouter);\n}\n\nexport function bindRouter(router: IRouter, container: IContainer = injectContainer()) {\n container.bind(TYPES.IRouter, router);\n}\n","\n\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteLaunchArguments } from '../../controllers/launch/interface';\nimport { IRouteLaunch } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IConfigAPI } from '../../interface/config';\nimport { IStateUserSession } from '../../interface/state';\n\n\nexport function mapRouteToProps(props: RouteComponentProps<{}>, query: IQueryURL, state: IStateUserSession, config: IConfigAPI): IRouteLaunchArguments {\n const args: Partial = query.parse(props.location.search) ?? {};\n\n const route: IRouteLaunchArguments = {\n db: args?.db || state.sessionName || config.auth.username,\n sessionName: args?.sessionName || state.sessionName || config.auth.username,\n }\n\n return route;\n}\n\nexport function mapPropsToUserState(props: IRouteLaunchArguments, defaultValues: IStateUserSession): IStateUserSession {\n return {\n ...defaultValues,\n sessionName: props.sessionName,\n }\n}\n\nexport function equals(args1: IRouteLaunchArguments, args2: IRouteLaunchArguments): boolean {\n if ( args1.db === args2.db ) { return true; }\n if ( args1.sessionName === args2.sessionName ) { return true; }\n return false;\n}\n","import { useEffect, useState } from 'react';\r\nimport { injectUserSession, IStateUserSession, IStateUserSessionManager } from '../../interface/state';\r\nimport { activeSession } from '../../controllers/downloadrequest/util';\r\nimport ILanguageDto from '@workspace/apiservice/src/model/LanguageDto.if';\r\n\r\nconst useUserSession = () => {\r\n const [userState, setUserState] = useState<{ state: IStateUserSession | null; session: IStateUserSessionManager | null }>({ state: null, session: null })\r\n const [language, setLanguage] = useState(null)\r\n\r\n useEffect(() => {\r\n const loadSession = async () => {\r\n const session = await injectUserSession();\r\n const state = await session.current();\r\n setUserState({ session, state })\r\n }\r\n loadSession()\r\n }, []);\r\n\r\n useEffect(() => {\r\n const getLanguage = async () => {\r\n const session = await activeSession(injectUserSession());\r\n if ( !session || !userState.state ) { return; }\r\n const language = await session.db.language().get(userState.state.languageId)\r\n language.code && setLanguage({ ...language, code: language.code.toLowerCase() })\r\n }\r\n if(userState) {\r\n getLanguage()\r\n }\r\n }, [userState]);\r\n\r\n return { userState, language }\r\n}\r\n\r\nexport default useUserSession","\nimport { useState, useEffect, useCallback, memo } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteName, injectRouter } from '../../interface/route';\nimport Controller from '../../controllers/launch';\nimport { mapPropsToUserState, mapRouteToProps } from './arguments'\nimport { injectQueryURL } from '../../interface/util';\nimport { IRouteLaunchArguments } from '../../controllers/launch/interface';\nimport { injectConfigAPI } from '../../interface/config';\nimport { injectUserSession } from '../../interface/state';\nimport useUserSession from '../../components/common/useUserSession';\n\n\nfunction LaunchRoute(props: RouteComponentProps<{}>): JSX.Element {\n const query = injectQueryURL();\n const router = injectRouter();\n const configAPI = injectConfigAPI();\n const { userState: {state} } = useUserSession()\n const userStateInject = injectUserSession();\n\n const [route, setRoute] = useState(mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI))\n\n const didRequestLanguageSelect = useCallback(() => {\n router.push(IRouteName.LanguageSelect, props.history, route, {replace: true});\n }, [props, router, route])\n\n useEffect(() => {\n setRoute(mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI))\n }, [props]);\n\n useEffect(() => {\n const newState = mapPropsToUserState(route, state ?? userStateInject.new())\n userStateInject.save(newState);\n newState.setCurrent()\n }, [route])\n \n return (\n \n ) \n}\n\nconst propsEqual = (prev: RouteComponentProps<{}>, next: RouteComponentProps<{}>) => {\n return (\n ( prev.location.search === next.location.search ) &&\n ( prev.location.pathname === next.location.pathname )\n );\n}\n\nexport default memo(LaunchRoute, propsEqual);\n\n","\nimport type { History } from 'history';\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRouteLaunch } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IRouteActionResult, IRouteName } from '../../interface/route';\nimport type IController from '../../controllers/launch';\n\nconst loadController = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('../../controllers/launch')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n }); \n};\n\nfunction push(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteLaunch): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'LanguageSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nfunction replace(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteLaunch): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n id: render.additionalRouteDataNeeded.tour.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'LanguageSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nconst exports = {\n push,\n replace,\n}\n\nexport default exports \n","\n\n\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRoute } from '../../interface/route';\nimport component from './component';\nimport { IRouteLaunch } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport coordinator from './coordinator';\n\n\nfunction route(settings: IRouteConfigSettings, query: IQueryURL): IRoute {\n const route: IRoute = {\n paths: [settings.pathPrefix, ...settings.pathMatch.splice(1)],\n push: (history, props) => coordinator.push(settings, query, history, props),\n replace: (history, props) => coordinator.replace(settings, query, history, props),\n component: component,\n } \n\n return route;\n}\n\nexport default route;","\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteLanguageSelectArguments } from '../../controllers/languageselect/interface';\nimport { IRouteLanguageSelect } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IConfigAPI } from '../../interface/config';\nimport { IStateUserSession } from '../../interface/state';\n\nexport function mapRouteToProps(props: RouteComponentProps<{}>, query: IQueryURL, state: IStateUserSession, config: IConfigAPI): IRouteLanguageSelectArguments {\n const args: Partial = query.parse(props.location.search) ?? {};\n\n const route: IRouteLanguageSelectArguments = {\n db: args?.db || state.sessionName || config.auth.username,\n sessionName: args?.sessionName || state.sessionName || config.auth.username,\n }\n\n return route;\n}\n\nexport function mapPropsToUserState(props: IRouteLanguageSelectArguments, defaultValues: IStateUserSession): IStateUserSession {\n return {\n ...defaultValues,\n sessionName: props.sessionName,\n }\n}\n\nexport function equals(args1: IRouteLanguageSelectArguments, args2: IRouteLanguageSelectArguments): boolean {\n if ( args1.db === args2.db ) { return true; }\n if ( args1.sessionName === args2.sessionName ) { return true; }\n return false;\n}\n","\n\n\nimport { useState, useEffect, useCallback, memo } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteName, injectRouter } from '../../interface/route';\nimport Controller from '../../controllers/languageselect';\nimport { mapRouteToProps, equals as ArgsEquals, mapPropsToUserState } from './arguments';\nimport type { IRouteLanguageSelectArguments } from '../../controllers/languageselect/interface';\nimport { injectQueryURL } from '../../interface/util';\nimport { injectConfigAPI } from '../../interface/config';\nimport { injectUserSession, IStateUserSession } from '../../interface/state';\nimport useUserSession from '../../components/common/useUserSession';\n\n\nconst updateStateLanguageId = (languageId: number): Promise => {\n return new Promise( async function(resolve, reject) {\n try {\n const userState = injectUserSession();\n const newUserState: IStateUserSession = {...(await userState.current() ?? userState.new()), languageId, };\n await userState.save(newUserState);\n resolve()\n } catch (e) {\n reject(e)\n }\n })\n}\n\nfunction LanguageSelectRoute(props: RouteComponentProps<{}>) : JSX.Element {\n const query = injectQueryURL();\n const router = injectRouter();\n const configAPI = injectConfigAPI();\n const { userState: { state } } = useUserSession()\n const userStateInject = injectUserSession();\n\n const [route, setRoute] = useState(mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI));\n\n const didRequestTourSelect = useCallback( async (id: number) => {\n await updateStateLanguageId(id);\n router.push(IRouteName.TourSelect, props.history, {\n ...route,\n languageId: id,\n });\n }, [route, props, router]);\n\n const didRequestBack = useCallback(() => {\n updateStateLanguageId(-1);\n\n if ( !router.pop(props.history, route) ) {\n /* if we fail to go back, reset the app & go to Launch route */\n router.push(IRouteName.Launch, props.history, route, {replace: true});\n }\n }, [route, props, router]);\n\n useEffect(() => {\n const newRoute = mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI);\n if ( ArgsEquals(newRoute, route) ) { return; }\n setRoute(newRoute);\n }, [props]);\n\n useEffect(() => {\n const newState = mapPropsToUserState(route, state ?? userStateInject.new())\n userStateInject.save(newState);\n }, [route])\n\n return (\n \n )\n}\n\nconst propsEqual = (prev: RouteComponentProps<{}>, next: RouteComponentProps<{}>) => {\n return (\n ( prev.location.search === next.location.search ) &&\n ( prev.location.pathname === next.location.pathname )\n );\n}\n\nexport default memo(LanguageSelectRoute, propsEqual);\n\n","\nimport type { History } from 'history';\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRouteLanguageSelect } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IRouteActionResult, IRouteName } from '../../interface/route';\nimport type IController from '../../controllers/languageselect';\n\nconst loadController = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('../../controllers/languageselect')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n });\n};\n\nfunction push(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteLanguageSelect): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n languageId: render.additionalRouteDataNeeded.language.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'TourSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nfunction replace(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteLanguageSelect): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n languageId: render.additionalRouteDataNeeded.language.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'TourSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nconst exports = {\n push,\n replace,\n}\n\nexport default exports \n","\n\n\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRoute } from '../../interface/route';\nimport { IQueryURL } from '../../interface/util';\nimport component from './component';\nimport { IRouteLanguageSelect } from './interface';\nimport coordinator from './coordinator';\n\n\nfunction route(settings: IRouteConfigSettings, query: IQueryURL): IRoute {\n const route: IRoute = {\n paths: [settings.pathPrefix, ...settings.pathMatch.splice(1)],\n push: (history, props) => coordinator.push(settings, query, history, props),\n replace: (history, props) => coordinator.replace(settings, query, history, props),\n component: component,\n } \n\n return route;\n}\n\nexport default route;","\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteTourSelectArguments } from '../../controllers/tourselect/interface';\nimport { IRouteTourSelect } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IConfigAPI } from '../../interface/config';\nimport { IStateUserSession } from '../../interface/state';\n\nexport function mapRouteToProps(props: RouteComponentProps<{}>, query: IQueryURL, state: IStateUserSession, config: IConfigAPI): IRouteTourSelectArguments {\n const args: Partial = query.parse(props.location.search) ?? {};\n\n const route: IRouteTourSelectArguments = {\n db: args?.db || state.sessionName || config.auth.username,\n sessionName: args?.sessionName || state.sessionName || config.auth.username,\n languageId: parseInt( (args?.languageId ?? 0).toString() ) || state.languageId || -1,\n }\n\n return route;\n}\n\nexport function mapPropsToUserState(props: IRouteTourSelectArguments, defaultValues: IStateUserSession): IStateUserSession {\n return {\n ...defaultValues,\n sessionName: props.sessionName,\n languageId: props.languageId,\n }\n}\n\nexport function equals(args1: IRouteTourSelectArguments, args2: IRouteTourSelectArguments): boolean {\n if ( args1.db === args2.db ) { return true; }\n if ( args1.sessionName === args2.sessionName ) { return true; }\n if ( args1.languageId === args2.languageId ) { return true; }\n return false;\n}\n","\n\n\nimport { useState, useEffect, useCallback, memo } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteName, injectRouter } from '../../interface/route';\nimport Controller from '../../controllers/tourselect';\nimport { mapRouteToProps, equals as ArgsEquals, mapPropsToUserState } from './arguments';\nimport { IRouteTourSelectArguments } from '../../controllers/tourselect/interface';\nimport { injectQueryURL } from '../../interface/util';\nimport { injectConfigAPI } from '../../interface/config';\nimport { injectUserSession, IStateUserSession } from '../../interface/state';\nimport useUserSession from '../../components/common/useUserSession';\n\nconst updateStateTourId = async (tourId: number) => {\n const userState = injectUserSession();\n\n const newUserState: IStateUserSession = {...(await userState.current() ?? userState.new()), tourId, };\n\n return userState.save(newUserState);\n}\n\nfunction TourSelectRoute(props: RouteComponentProps<{}>) : JSX.Element {\n const query = injectQueryURL();\n const configAPI = injectConfigAPI();\n const { userState : { state } } = useUserSession()\n const userStateInject = injectUserSession();\n const router = injectRouter();\n\n const [route, setRoute] = useState(mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI))\n\n const didRequestTour = useCallback((id: number) => {\n updateStateTourId(id);\n\n router.push(IRouteName.Tour, props.history, {\n ...route,\n tourId: id,\n });\n }, [route, props, router]);\n\n const didRequestBack = useCallback(() => {\n updateStateTourId(-1);\n\n if ( !router.pop(props.history, route) ) {\n /* if we fail to go back, reset the app & go to Launch route */\n router.push(IRouteName.Launch, props.history, route, {replace: true});\n }\n }, [route, props, router]);\n\n useEffect(() => {\n const newRoute = mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI);\n if ( ArgsEquals(newRoute, route) ) { return; }\n setRoute(newRoute);\n }, [props]);\n\n useEffect(() => {\n const newState = mapPropsToUserState(route, state ?? userStateInject.new())\n userStateInject.save(newState);\n }, [route])\n\n return (\n \n )\n}\n\nconst propsEqual = (prev: RouteComponentProps<{}>, next: RouteComponentProps<{}>) => {\n return (\n ( prev.location.search === next.location.search ) &&\n ( prev.location.pathname === next.location.pathname )\n );\n}\n\nexport default memo(TourSelectRoute, propsEqual);\n","\nimport type { History } from 'history';\nimport type { IRouteConfigSettings } from '../../interface/config';\nimport type { IRouteTourSelect } from './interface';\nimport type { IQueryURL } from '../../interface/util';\nimport type { IRouteActionResult, IRouteName } from '../../interface/route';\nimport type IController from '../../controllers/tourselect';\n\nconst loadController = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('../../controllers/tourselect')\n .then(coordinator => resolve(coordinator.default))\n .catch(error => reject(error));\n });\n}\n\nfunction push(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteTourSelect): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const renderResult = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( renderResult.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n tourId: renderResult.additionalRouteDataNeeded.tour.id,\n };\n\n result.alternativeRouteRequested = (renderResult.suggestedAlternativeRoute || 'Tour') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nfunction replace(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteTourSelect): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n tourId: render.additionalRouteDataNeeded.tour.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'Tour') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nconst exports = {\n push,\n replace,\n}\n\nexport default exports \n","\n\n\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRoute } from '../../interface/route';\nimport { IQueryURL } from '../../interface/util';\nimport component from './component';\nimport { IRouteTourSelect } from './interface';\nimport coordinator from './coordinator';\n\n\nfunction route(settings: IRouteConfigSettings, query: IQueryURL): IRoute {\n const route: IRoute = {\n paths: [settings.pathPrefix, ...settings.pathMatch.splice(1)],\n push: (history, props) => coordinator.push(settings, query, history, props),\n replace: (history, props) => coordinator.replace(settings, query, history, props),\n component: component,\n } \n\n return route;\n}\n\nexport default route;","\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteTourArguments } from '../../controllers/tour/interface';\nimport { IRouteTour } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IConfigAPI } from '../../interface/config';\nimport { IStateUserSession } from '../../interface/state';\n\n\nexport function mapRouteToProps(props: RouteComponentProps<{}>, query: IQueryURL, state: IStateUserSession, config: IConfigAPI): IRouteTourArguments {\n const args: Partial = query.parse(props.location.search) ?? {};\n\n const route: IRouteTourArguments = {\n db: args?.db || config.auth.username,\n languageId: parseInt( (args?.languageId ?? 0).toString() ) || state.languageId || -1,\n tourId: parseInt( (args?.tourId ?? 0).toString() ) || state.tourId || -1,\n sessionName: args?.sessionName || config.auth.username,\n }\n\n return route;\n}\n\nexport function mapPropsToUserState(props: IRouteTourArguments, defaultValues: IStateUserSession): IStateUserSession {\n return {\n ...defaultValues,\n sessionName: props.sessionName,\n languageId: props.languageId,\n tourId: props.tourId,\n }\n}\n\nexport function equals(args1: IRouteTourArguments, args2: IRouteTourArguments): boolean {\n if ( args1.db === args2.db ) { return true; }\n if ( args1.languageId === args2.languageId ) { return true; }\n if ( args1.tourId === args2.tourId ) { return true; }\n if ( args1.sessionName === args2.sessionName ) { return true; }\n return false;\n}\n","\n\nimport { Fragment, Suspense, useState, useEffect, lazy, memo } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteName, injectRouter } from '../../interface/route';\nimport Controller from '../../controllers/tour';\nimport { mapRouteToProps, equals as ArgsEquals, mapPropsToUserState } from './arguments';\nimport { IRouteTourArguments } from '../../controllers/tour/interface';\nimport SiteObjectController from '../../controllers/siteobject';\nimport { injectLog, injectQueryURL } from '../../interface/util';\nimport { DataCheckResult } from '../../controllers/interface';\nimport { injectConfigAPI } from '../../interface/config';\nimport { injectUserSession } from '../../interface/state';\nimport useUserSession from '../../components/common/useUserSession';\n\nconst ToastMessage = lazy(() => import('../../controllers/ToastMessage'));\nconst DISPLAY_TOAST_DURATION = 6000;\n\n\nfunction TourRoute(props: RouteComponentProps<{}>) : JSX.Element {\n const query = injectQueryURL();\n const router = injectRouter();\n const configAPI = injectConfigAPI();\n const { userState: { state } } = useUserSession()\n const userStateInject = injectUserSession();\n const log = injectLog();\n\n const [toast, setToast] = useState<{text: string, show: boolean}>({\n text: '',\n show: false,\n })\n\n const [route, setRoute] = useState(mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI));\n\n const didRequestSiteObject = function(id: number) {\n const newRoute = {\n ...route,\n siteObjectId: id,\n };\n\n Promise.all([SiteObjectController.canLoad(newRoute), SiteObjectController.canRender(newRoute)]) \n .then(function([canLoad, canRender]) {\n const canPush = navigator.onLine || canLoad === DataCheckResult.DataAvailableOffline;\n\n if ( canPush && canRender ) {\n router.push(IRouteName.SiteObject, props.history, newRoute);\n } else {\n setToast({\n text: !canPush ? 'Unable to launch without internet connection' : '`Unable to display content',\n show: true,\n })\n\n setTimeout(()=>setToast({text:'',show:false}), DISPLAY_TOAST_DURATION);\n }\n })\n .catch(error => log.error(error)); \n };\n\n const didRequestFloorPlan = function(id: number) {\n router.push(IRouteName.FloorPlan, props.history, {\n ...route,\n floorplanId: id,\n }) \n };\n\n const didRequestLanguageSelect = function() {\n /* try to go back in our history to LanguageSelect, if we can't find it, fallback to PUSH */\n if ( !router.popTo(IRouteName.LanguageSelect, props.history, route) ) {\n router.push(IRouteName.LanguageSelect, props.history, route);\n }\n };\n\n const didRequestTourSelect = function() {\n /* try to go back in our history to LanguageSelect, if we can't find it, fallback to PUSH */\n if ( !router.popTo(IRouteName.TourSelect, props.history, route) ) {\n router.push(IRouteName.TourSelect, props.history, route);\n }\n };\n\n const didRequestBack = function() {\n if ( !router.pop(props.history, route) ) {\n /* if we fail to go back, reset the app & go to Launch route */\n router.push(IRouteName.Launch, props.history, route, {replace: true});\n }\n };\n\n useEffect(() => {\n const newRoute = mapRouteToProps(props, query, state ?? userStateInject.new(), configAPI);\n if ( ArgsEquals(newRoute, route) ) { return; }\n setRoute(newRoute);\n }, [props]);\n\n useEffect(() => {\n const newState = mapPropsToUserState(route, state ?? userStateInject.new())\n userStateInject.save(newState);\n }, [route])\n\n return (\n \n \n \n \n \n \n )\n}\n\nconst propsEqual = (prev: RouteComponentProps<{}>, next: RouteComponentProps<{}>) => {\n return (\n ( prev.location.search === next.location.search ) &&\n ( prev.location.pathname === next.location.pathname )\n );\n}\n\nexport default memo(TourRoute, propsEqual);\n","\nimport type { History } from 'history';\nimport type { IRouteConfigSettings } from '../../interface/config';\nimport type { IRouteTour } from './interface';\nimport type { IQueryURL } from '../../interface/util';\nimport type { IRouteActionResult, IRouteName } from '../../interface/route';\nimport type IController from '../../controllers/tour';\n\nconst loadController = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('../../controllers/tour')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n })\n}\n\nfunction push(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteTour): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n ...render.additionalRouteDataNeeded,\n };\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'TourSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nfunction replace(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteTour): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n id: render.additionalRouteDataNeeded.tour.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'TourSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nconst exports = {\n push,\n replace,\n}\n\nexport default exports \n","\n\n\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRoute } from '../../interface/route';\nimport { IQueryURL } from '../../interface/util';\nimport component from './component';\nimport { IRouteTour } from './interface';\nimport coordinator from './coordinator';\n\nfunction route(settings: IRouteConfigSettings, query: IQueryURL): IRoute {\n const route: IRoute = {\n paths: [settings.pathPrefix, ...settings.pathMatch.splice(1)],\n push: (history, props) => coordinator.push(settings, query, history, props),\n replace: (history, props) => coordinator.replace(settings, query, history, props),\n component: component,\n } \n\n return route;\n}\n\nexport default route;","\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteSiteObjectArguments } from '../../controllers/siteobject/interface';\nimport { IRouteSiteObject } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IConfigAPI } from '../../interface/config';\n\nfunction args(props: RouteComponentProps<{}>, query: IQueryURL, config: IConfigAPI): IRouteSiteObjectArguments {\n const args: Partial = query.parse(props.location.search) ?? {};\n\n const route: IRouteSiteObjectArguments = {\n db: args?.db || config.auth.username,\n languageId: parseInt( (args?.languageId ?? -1).toString() ),\n tourId: parseInt( (args?.tourId ?? -1).toString() ),\n siteObjectId: parseInt( (args?.siteObjectId ?? -1).toString() ),\n sessionName: args?.sessionName || config.auth.username,\n }\n\n return route;\n}\n\nexport function equals(args1: IRouteSiteObjectArguments, args2: IRouteSiteObjectArguments): boolean {\n if ( args1.db === args2.db ) { return true; }\n if ( args1.languageId === args2.languageId ) { return true; }\n if ( args1.tourId === args2.tourId ) { return true; }\n if ( args1.siteObjectId === args2.siteObjectId ) { return true; }\n if ( args1.sessionName === args2.sessionName ) { return true; }\n return false;\n}\n\nexport default args;\n","\n\n\nimport { Fragment, Suspense, useState, useEffect, lazy, memo } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteName, injectRouter } from '../../interface/route';\nimport Controller from '../../controllers/siteobject';\nimport args, { equals as ArgsEquals } from './arguments';\nimport type { ISiteObjectControllerProps } from '../../controllers/siteobject/interface';\nimport { injectLog, injectQueryURL } from '../../interface/util';\nimport { DataCheckResult } from '../../controllers/interface';\nimport { injectConfigAPI } from '../../interface/config';\n\nconst ToastMessage = lazy(() => import('../../controllers/ToastMessage'));\nconst DISPLAY_TOAST_DURATION = 6000;\n\n\nfunction SiteObjectRoute(props: RouteComponentProps<{}>) : JSX.Element {\n const query = injectQueryURL();\n const router = injectRouter();\n const configAPI = injectConfigAPI();\n const log = injectLog();\n\n const [toast, setToast] = useState<{text: string, show: boolean}>({\n text: '',\n show: false,\n })\n\n const [controller, setController] = useState({\n route: args(props, query, configAPI),\n didRequestSiteObject: function(this: ISiteObjectControllerProps, id: number) {\n const newRoute = {\n ...controller.route,\n siteObjectId: id,\n };\n\n Promise.all([Controller.canLoad(newRoute), Controller.canRender(newRoute)]) \n .then(function([canLoad, canRender]) {\n const canPush = navigator.onLine || canLoad === DataCheckResult.DataAvailableOffline;\n\n\n if ( canPush && canRender ) {\n router.push(IRouteName.SiteObject, props.history, newRoute);\n } else {\n setToast({\n text: !canPush ? 'Unable to launch without internet connection' : '`Unable to display content',\n show: true,\n });\n\n setTimeout(()=>setToast({text:'',show:false}), DISPLAY_TOAST_DURATION);\n }\n })\n .catch(error => log.error(error)); \n },\n didRequestBack: function(this: ISiteObjectControllerProps) {\n if ( !router.pop(props.history, controller.route) ) {\n /* if we fail to go back, reset the app & go to Launch route */\n router.push(IRouteName.Launch, props.history, controller.route, {replace: true});\n }\n },\n });\n\n\n useEffect(() => {\n const newRoute = args(props, query, configAPI);\n setController((controllerIn) => ({...controllerIn, route: newRoute}))\n }, [props]);\n\n return (\n \n \n \n \n \n \n )\n}\n\nconst propsEqual = (prev: RouteComponentProps<{}>, next: RouteComponentProps<{}>) => {\n return (\n ( prev.location.search === next.location.search ) &&\n ( prev.location.pathname === next.location.pathname )\n );\n}\n\nexport default memo(SiteObjectRoute, propsEqual);\n\n","\nimport { History } from 'history';\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRouteSiteObject } from './interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IRouteActionResult, IRouteName } from '../../interface/route';\nimport type IController from '../../controllers/siteobject';\n\nconst loadController = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('../../controllers/siteobject')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n }); \n};\n\nfunction push(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteSiteObject): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n id: render.additionalRouteDataNeeded.tour.id,\n };\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'Tour') as IRouteName;\n }\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nfunction replace(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteSiteObject): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n id: render.additionalRouteDataNeeded.tour.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'Tour') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nconst exports = {\n push,\n replace,\n}\n\nexport default exports \n","\n\n\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRoute } from '../../interface/route';\nimport { IQueryURL } from '../../interface/util';\nimport component from './component';\nimport { IRouteSiteObject } from './interface';\nimport coordinator from './coordinator';\n\n\nfunction route(settings: IRouteConfigSettings, query: IQueryURL): IRoute {\n const route: IRoute = {\n paths: [settings.pathPrefix, ...settings.pathMatch.splice(1)],\n push: (history, props) => coordinator.push(settings, query, history, props),\n replace: (history, props) => coordinator.replace(settings, query, history, props),\n component: component,\n } \n\n return route;\n}\n\nexport default route;","\nimport { RouteComponentProps } from 'react-router-dom';\nimport { IRouteFloorplanArguments } from '../../controllers/floorplan/interface';\nimport { IQueryURL } from '../../interface/util';\nimport { IConfigAPI } from '../../interface/config';\n\nfunction _parseToInt(num: any): number|undefined {\n if ( typeof(num) === 'number' ) {\n return num as number;\n } else if ( typeof(num) === 'string' ) {\n return parseInt(num as string);\n } else {\n return 0;\n }\n}\n\nfunction args(props: RouteComponentProps<{}>, query: IQueryURL, config: IConfigAPI): IRouteFloorplanArguments {\n const args: Partial = query.parse(props.location.search) ?? {};\n\n const route: IRouteFloorplanArguments = {\n db: args?.db || config.auth.username,\n sessionName: args?.sessionName || config.auth.username,\n\n languageId: _parseToInt(args?.languageId) ?? -1,\n tourId: _parseToInt(args?.tourId) ?? -1,\n floorplanId: _parseToInt(args?.floorplanId) ?? -1,\n };\n\n return route;\n}\n\nexport function equals(args1: IRouteFloorplanArguments, args2: IRouteFloorplanArguments): boolean {\n if ( args1.db === args2.db ) { return true; }\n if ( args1.sessionName === args2.sessionName ) { return true; }\n if ( args1.languageId === args2.languageId ) { return true; }\n if ( args1.tourId === args2.tourId ) { return true; }\n if ( args1.floorplanId === args2.floorplanId ) { return true; }\n return false;\n}\n\nexport default args;","\n\n\nimport { useState, memo } from 'react';\nimport { RouteComponentProps } from 'react-router-dom';\nimport { injectRouter, IRouteName } from '../../interface/route';\nimport Controller from '../../controllers/floorplan';\nimport args from './arguments';\nimport { injectQueryURL } from '../../interface/util';\nimport { IFloorplanControllerProps } from '../../controllers/floorplan/interface';\nimport { injectConfigAPI } from '../../interface/config';\n\nfunction FloorplanRoute(props: RouteComponentProps<{}>) : JSX.Element {\n const query = injectQueryURL();\n const router = injectRouter();\n const configAPI = injectConfigAPI();\n\n const [state, _] = useState({\n route: args(props, query, configAPI),\n onRequestSiteObject: function(this: IFloorplanControllerProps, id: number) {\n router.push(IRouteName.SiteObject, props.history, {\n ...state.route,\n siteObjectId: id,\n });\n },\n onRequestBack: function(this: IFloorplanControllerProps) {\n props.history.goBack();\n },\n });\n\n return (\n \n ) \n}\n\nconst propsEqual = (prev: RouteComponentProps<{}>, next: RouteComponentProps<{}>) => {\n return (\n ( prev.location.search === next.location.search ) &&\n ( prev.location.pathname === next.location.pathname )\n );\n}\n\nexport default memo(FloorplanRoute, propsEqual);\n\n","\nimport type { History } from 'history';\nimport type { IRouteConfigSettings } from '../../interface/config';\nimport type { IRouteFloorplan } from './interface';\nimport type { IQueryURL } from '../../interface/util';\nimport type { IRouteActionResult, IRouteName } from '../../interface/route';\nimport type IController from '../../controllers/floorplan';\n\nconst loadController = (): Promise => {\n return new Promise(function(resolve, reject) {\n import('../../controllers/floorplan')\n .then(controller => resolve(controller.default))\n .catch(error => reject(error));\n });\n};\n\nfunction push(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteFloorplan): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n id: render.additionalRouteDataNeeded.tour.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'TourSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nfunction replace(settings: IRouteConfigSettings, query: IQueryURL, history: History, props: IRouteFloorplan): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const controller = await loadController();\n const render = await controller.canRender(props);\n\n let result: IRouteActionResult = {\n didLaunchAction: false,\n };\n\n if ( render.hasEnoughDataToRender ) {\n history.push(settings.pathPrefix + query.assemble(props))\n result.didLaunchAction = true;\n } else {\n result.alternativeRoutePayload = {\n ...props,\n id: render.additionalRouteDataNeeded.tour.id,\n };\n\n result.alternativeRouteRequested = (render.suggestedAlternativeRoute || 'TourSelect') as IRouteName;\n }\n\n resolve(result);\n } catch(error) {\n reject(error);\n }\n });\n} \n\nconst exports = {\n push,\n replace,\n}\n\nexport default exports \n","\n\n\nimport { IRouteConfigSettings } from '../../interface/config';\nimport { IRoute } from '../../interface/route';\nimport { IQueryURL } from '../../interface/util';\nimport component from './component';\nimport { IRouteFloorplan } from './interface';\nimport coordinator from './coordinator';\n\n\nfunction route(settings: IRouteConfigSettings, query: IQueryURL): IRoute {\n const route: IRoute = {\n paths: [settings.pathPrefix, ...settings.pathMatch.splice(1)],\n push: (history, props) => coordinator.push(settings, query, history, props),\n replace: (history, props) => coordinator.replace(settings, query, history, props),\n component: component,\n } \n\n return route;\n}\n\nexport default route;","\nimport * as H from \"history\";\n\nexport interface ILocationHistory {\n length: () => number;\n history: () => Array;\n findFirstPathPrefix: (pathPrefix: Array) => number;\n findPathPrefix: (pathPrefix: string) => number;\n}\n\nexport interface ILocationHistoryPrivate extends ILocationHistory {\n _history: Array;\n _controller: H.History;\n}\n\n\ntype HISTORY_ACTIONS = 'PUSH' | 'POP' | 'REPLACE';\n\nfunction LocationHistory(history: H.History): ILocationHistory {\n \n const val: ILocationHistoryPrivate = {\n length: function(this: ILocationHistoryPrivate) { return this._history.length; },\n _history: [],\n _controller: history,\n findFirstPathPrefix: function(this: ILocationHistoryPrivate, pathPrefixes: Array) {\n for ( let idx=0; idx= 0 ) { return idxSearch; }\n }\n return -1;\n },\n findPathPrefix: function(this: ILocationHistoryPrivate, pathPrefix: string) {\n for ( let idx=0; idx,\n languageSelect: IRoute,\n tourSelect: IRoute,\n tour: IRoute,\n siteObject: IRoute,\n floorPlan: IRoute,\n },\n history?: ILocationHistory;\n}\n\n\nfunction _route(router: IRouterPrv, name: IRouteName): IRoute|null {\n let route: IRoute | null = null;\n switch (name) {\n case IRouteName.Launch:\n route = router.routes.launch;\n break;\n\n case IRouteName.LanguageSelect:\n route = router.routes.languageSelect;\n break;\n\n case IRouteName.TourSelect:\n route = router.routes.tourSelect;\n break;\n\n case IRouteName.Tour:\n route = router.routes.tour;\n break;\n\n case IRouteName.SiteObject:\n route = router.routes.siteObject;\n break;\n\n case IRouteName.FloorPlan:\n route = router.routes.floorPlan;\n break;\n \n default:\n throw Error(`Unknown router route: ${name}`);\n }\n return route;\n}\n\nfunction Router(config: IConfigRoute, query: IQueryURL): IRouter {\n const routes = config.routes\n const router: IRouterPrv = {\n routes: {\n launch: launch(routes[IConfigRoutePath.Launch], query),\n languageSelect: languageSelect(routes[IConfigRoutePath.LanguageSelect], query),\n tourSelect: tourSelect(routes[IConfigRoutePath.TourSelect], query),\n tour: tour(routes[IConfigRoutePath.Tour], query),\n siteObject: siteObject(routes[IConfigRoutePath.SiteObject], query),\n floorPlan: floorPlan(routes[IConfigRoutePath.FloorPlan], query),\n },\n\n push: function(this: IRouterPrv, name: IRouteName, history: any, args: any, options?: {replace?: boolean}) {\n if ( !this.history ) { this.history = LocationHistory(history); }\n\n const self = this;\n\n const route: IRoute | null = _route(this, name);\n\n if ( !route ) { return; }\n\n route.push(history, args)\n .then(function(result) {\n if ( result.didLaunchAction && route ) { \n /* done */\n } else if ( result.alternativeRouteRequested ) {\n self.push(result.alternativeRouteRequested, history, result.alternativeRoutePayload ?? {}); \n }\n })\n .catch(error => console.error(error));\n },\n\n popTo: function(this: IRouterPrv, name: IRouteName, history: any, args: any): boolean {\n if ( !this.history ) { this.history = LocationHistory(history); }\n\n const routeTarget: IRoute | null = _route(this, name);\n\n if ( !routeTarget ) { return false; }\n\n const curIdx = this.history?.findFirstPathPrefix(routeTarget.paths) ?? -1;\n\n if ( curIdx >= 0 ) {\n const popCount = ((this.history?.length() ?? -1) - curIdx) - 1;\n history.go(-popCount);\n }\n\n const didPop = curIdx >= 0; \n return didPop;\n },\n\n pop: function(this: IRouterPrv, history: any, args: any): boolean {\n return this.popCount(1, history, args);\n },\n\n popCount: function(this: IRouterPrv, popCount: number, history: any, args: any): boolean {\n if ( !this.history ) { this.history = LocationHistory(history); }\n\n const canPop = popCount <= (this.history?.length() ?? -1) \n\n if ( canPop ) {\n history.go(-popCount);\n }\n\n return canPop;\n },\n \n allRoutes: function(this: IRouterPrv) {\n return Object.values(this.routes);\n }\n }\n \n return router as IRouter;\n}\n\nexport default Router;","\n\n\n\nimport { bindRouter } from '../interface/route';\nimport { injectConfigRoute } from '../interface/config';\nimport { injectQueryURL } from '../interface/util';\nimport Router from './router';\nimport { IContainer } from '../interface/container';\n\n\nexport function bind(container: IContainer): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const settings = injectConfigRoute();\n const query = await injectQueryURL();\n const router = Router(settings, query);\n\n bindRouter(router, container);\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n","\nimport { IStateUserSession, IStateUserSessionManager } from '../interface/state';\n\nimport Dexie from 'dexie';\n\nconst TABLE_NAME = \"IUserState\";\nconst TABLE_OPTIONS = \"id, sessionName, grouping, languageId, tourId\"\n\n\nexport interface DexieDBMap {\n [Key: string]: string;\n}\n\nexport interface DexieDBOptions {\n name?: string;\n indexedDB?: any;\n IDBKeyRange?: any;\n version?: number;\n mappings?: DexieDBMap;\n}\n\nclass DexieDB extends Dexie {\n constructor (options: DexieDBOptions = {}) {\n\n if ( !options.IDBKeyRange ) {\n options.IDBKeyRange = IDBKeyRange;\n }\n\n if ( !options.indexedDB ) {\n options.indexedDB = indexedDB;\n }\n\n const name = options.name ?? \"Workspace-DB\";\n\n super(name, options);\n\n this.version(options.version ?? 1)\n .stores(options.mappings ?? {});\n }\n}\n\nfunction _db(): DexieDB {\n const db = new DexieDB({\n version: 1,\n mappings: {\n [TABLE_NAME]: TABLE_OPTIONS,\n },\n name: TABLE_NAME,\n });\n\n return db;\n}\n\nfunction _session(data: Partial): IStateUserSession {\n let session: IStateUserSession = {\n id: -1,\n sessionName: '',\n grouping: '',\n languageId: -1,\n tourId: -1,\n\n setCurrent: function(this: IStateUserSession) {\n _activeUserSession = this;\n },\n };\n Object.assign(session, data);\n\n return session;\n}\n\nfunction _load(name: string): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const db = _db();\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n\n const resultTable: Partial = await table.get(name);\n\n db.close();\n\n if ( resultTable != null ) { \n const resultObj = _session(resultTable);\n resolve(resultObj)\n } else {\n reject('Unable to find session named: ' + name)\n } \n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _save(state: IStateUserSession) : Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const db = _db();\n\n await db.open();\n\n /* remove anything which we can't save */\n const saveData: Partial = {...state};\n delete saveData.setCurrent;\n\n const table = db.table(TABLE_NAME);\n\n const result = await table.put(saveData);\n\n db.close();\n\n ( result === saveData.id ) ?\n resolve() :\n reject('Failed to save data into patch-storage table');\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction _remove(state: IStateUserSession): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const db = _db();\n\n await db.open();\n\n const table = db.table(TABLE_NAME);\n\n await table.delete(state.id);\n\n db.close();\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n\nlet _activeUserSession: IStateUserSession|null = null;\n\nfunction _all(): Promise> {\n return new Promise(async function(resolve, reject) {\n try {\n const db = _db();\n await db.open();\n const table = db.table(TABLE_NAME);\n /* Get all data stored in IndexedDb */\n const resultTable: Array> = await\n table.toArray();\n db.close();\n /* Map each row to a IStateUserSesssion object */\n const resultObjects = resultTable.map(item => _session(item))\n resolve(resultObjects);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nasync function _getCurrent(): Promise {\n const allSessions: any = await _all();\n _activeUserSession = allSessions.length > 0 ? allSessions[allSessions.length-1] : null;\n return _activeUserSession;\n}\n\n\nfunction UserStateManager(): IStateUserSessionManager {\n const manager: IStateUserSessionManager = {\n get: (user: string) => _load(user),\n save: (user: IStateUserSession) => _save(user),\n remove: (user: IStateUserSession) => _remove(user),\n current: () => _getCurrent(),\n new: () => _session({ id: new Date().getTime(), }),\n }\n\n return manager;\n}\n\nexport default UserStateManager;\n","\nimport { IContainer } from '../interface/container';\nimport { bindUserSession } from '../interface/state';\nimport userState from './userState';\n\n\nfunction _bindUserState(container: IContainer) {\n const manager = userState();\n bindUserSession(manager, container);\n}\n\nexport function bind(container: IContainer): Promise {\n return new Promise(function(resolve, reject) {\n const binders = [_bindUserState];\n\n for ( const binder of binders ) {\n binder.call(null, container);\n }\n\n resolve();\n })\n}\n","\nimport { bindServiceWorker, IServiceWorker } from '../interface/serviceworker';\nimport { injectENV, injectFetch } from '../interface/util';\nimport { injectConfigCache } from '../interface/config';\nimport { IContainer } from '../interface/container';\n\nexport function bind(container: IContainer): Promise {\n let val: IServiceWorker|null = null;\n\n const resolver = () => {\n return new Promise(async function(resolve, reject) {\n let rejection = null;\n\n try {\n if ( !val ) {\n const worker = await import('./worker');\n const fetcher = await injectFetch(container);\n const cacheConfig = await injectConfigCache(container);\n const env = await injectENV(container);\n\n /* limit SW visibility to base subpath of PWA, scope *must* end with slash '/qc/mauto' -> '/qc/mauto/' */\n let scope = env.getString('REACT_APP_ROUTE_BASENAME') ?? '.'; \n\n if ( !scope.endsWith('/') ) {\n scope = scope + '/';\n }\n\n /* do not add path-prefix, it is auto added as part of the base href tag */ \n const swUrl = 'service-worker.js';\n\n val = worker.default(\n fetcher,\n cacheConfig,\n swUrl,\n scope);\n }\n } catch (error) {\n rejection = error;\n }\n\n if ( val ) { resolve(val); }\n else { reject(rejection || 'Import failed for worker'); }\n });\n }\n\n bindServiceWorker(resolver, container);\n\n return Promise.resolve();\n}\n","\nimport { createContext, ReactNode } from 'react';\nimport { IContainer } from './interface/container';\nimport { bind as bindConfig } from './config/bind';\nimport { bind as bindUtil } from './util/bind';\nimport { bind as bindRouter } from './routes/bind';\nimport { bind as bindState } from './state/bind';\nimport { bind as bindWorker } from './worker/bind';\nconst bindMediaPlayer = () => Promise.resolve(); /* placeholder, including path results in files bundled into static/js/main*.js increasing initial bundle size */\n\nconst IOCContext = createContext(null);\n\nexport interface IIOCContainerProps {\n container: IContainer;\n children?: ReactNode;\n};\n\nexport interface IContainerPrv extends IContainer {\n _map: Map;\n}\n\nexport function Container(): IContainer {\n const container: IContainerPrv = {\n _map: new Map(),\n get: function(this: IContainerPrv, key: symbol): T {\n return this._map.get(key) as T;\n },\n bind: function(this: IContainerPrv, key: symbol, value: any) {\n this._map.set(key, value);\n },\n };\n\n return container as IContainer;\n}\n\nexport function IOCContainer(props: IIOCContainerProps): JSX.Element {\n const ProviderIOC = IOCContext.Provider;\n return (\n \n {props.children}\n \n );\n};\n\nexport function bindAll(container: IContainer): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const binders: Array<(container: IContainer) => Promise> = [bindUtil, bindConfig, bindRouter, bindState, bindWorker, bindMediaPlayer];\n\n for ( const binder of binders ) {\n await binder(container);\n }\n\n resolve();\n } catch (error) {\n console.error(`bind failed: ${JSON.stringify(error)}`);\n reject(error);\n }\n });\n}\n","\n\nimport { StrictMode, Suspense, lazy } from 'react';\nimport { render as DOMrender } from 'react-dom';\nimport { bindAll, IOCContainer, Container } from './ioc';\nimport { injectRouter } from './interface/route';\nimport { injectConfigRoute } from './interface/config';\nimport { injectServiceWorker } from './interface/serviceworker';\nimport { injectENV, injectLog } from './interface/util';\nimport { bindContainer, IContainer } from './interface/container';\nimport type { ReportHandler } from 'web-vitals';\n\nconst LOADING_STYLE_NAME = 'OnBootLoadingStyle';\n\nfunction loadContainerBindings(container: IContainer): Promise {\n return bindAll(container);\n}\n\nfunction startServiceWorker(container: IContainer): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const isProduction = (process.env.NODE_ENV === 'production');\n const swEnableOverride = Boolean((process.env.REACT_APP_SWFORCE) || 'false'); /* for testing, run `yarn startsw` to force the Service Worker to run in development */\n const hasServiceWorker = 'serviceWorker' in navigator;\n const env = injectENV(container);\n const swEnabled = env.getBoolean('REACT_APP_SW_ENABLED', true); /* if missing assume YES, otherwise allow for ENV to disable service-workers (Agnelli) */\n\n /* Our service worker won't work if PUBLIC_URL is on a different origin\n from what our page is served on. This might happen if a CDN is used to\n serve assets; see https://github.com/facebook/create-react-app/issues/2374 */\n const urlIsAtOrigin = (new URL(process.env.PUBLIC_URL, window.location.href)).origin === window.location.origin;\n\n if ( !swEnabled ) {}\n else if ( !hasServiceWorker ) {}\n else if ( !urlIsAtOrigin) {}\n else if ( isProduction || swEnableOverride ) {\n const sw = await injectServiceWorker(container);\n sw.start();\n }\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction startRenderer(container: IContainer): Promise {\n return new Promise(async function(resolve, reject) {\n try {\n const router = injectRouter(container);\n const config = injectConfigRoute(container);\n \n const allRoutes = router.allRoutes();\n \n const App = lazy(() => import('./app'));\n const LoadingView = (\n
Loading..
\n );\n\n DOMrender(\n \n \n \n \n \n \n ,\n document.getElementById('root')\n );\n\n resolve();\n } catch (error) {\n reject(error);\n }\n })\n}\n\n/* start */\nconst container = Container();\n\nbindContainer(container);\n\nloadContainerBindings(container)\n .then(_ => startServiceWorker(container))\n .then(_ => startRenderer(container))\n .then(_ => {\n injectLog(container).milestone('App running');\n })\n .catch(error => {\n injectLog(container).error(`Failed to start app: ${JSON.stringify(error)}`);\n });\n\n/* If you want to start measuring performance in your app, pass a function\n to log results (for example: reportWebVitals(console.log))\n or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals */\nconst isProduction = (process.env.NODE_ENV === 'production'); /* disabled for production builds */\nif ( !isProduction) {\n const reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry); \n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n }\n\n reportWebVitals();\n}\n\n"],"sourceRoot":""}