{"version":3,"file":"photostoreconnector.min.js","sources":["photostoreconnector.ts"],"sourcesContent":["namespace eXpress.core {\r\n\texport class PhotoStoreConnector {\r\n\t\tprivate static storageService: services.StorageService;\r\n\t\tprivate static partnerWindow: Window | null = null;\r\n\r\n\t\tpublic static connectToAsync(store: IPhotoStore, storageService: services.StorageService): JQueryPromise {\r\n\t\t\tthis.storageService = storageService;\r\n\t\t\tif (store.isConnected && store.hasAlbumAccess)\r\n\t\t\t\treturn $.Deferred().resolve(store).promise();\r\n\r\n\t\t\tlet connectPomise: JQueryPromise | undefined = undefined;\r\n\t\t\tif (store instanceof partners.PartnerStore)\r\n\t\t\t\tconnectPomise = this.connectToPartnerStoreAsync(store);\r\n\t\t\telse\r\n\t\t\t\tconnectPomise = this.connectToSmartphotoStoreAsync(store);\r\n\r\n\t\t\treturn connectPomise;\r\n\t\t}\r\n\r\n\t\tprivate static connectToSmartphotoStoreAsync(store: core.ExpressStore): JQueryPromise {\r\n\t\t\treturn core.showLoadingDialogAsync(LoginPopup.createDialogAsync(true)).then($popup => new LoginPopup($popup).openAsync())\r\n\t\t\t\t.then(loginResult => {\r\n\t\t\t\t\tif (!loginResult)\r\n\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\tstore.isConnected = true;\r\n\t\t\t\t\tstore.hasAlbumAccess = true;\r\n\t\t\t\t\tstore.connectedUserName = loginResult.accountName;\r\n\t\t\t\t\treturn store;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\r\n\t\tprivate static connectToPartnerStoreAsync(store: core.partners.PartnerStore): JQueryPromise {\r\n\t\t\tconst url = store.locatePhotosUrl + \"?inpopup\";\r\n\t\t\tconst windowSize = html.getWindowSize();\r\n\r\n\t\t\t// open login window of partner\r\n\t\t\tif (this.partnerWindow === null || this.partnerWindow.closed)\r\n\t\t\t\tthis.partnerWindow = window.open(url, \"partnerWindow\", `left=${windowSize.width > 1200 ? (windowSize.width - 1200) / 2 : 0},top=0,height=${windowSize.height},width=1200,status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes`);\r\n\t\t\telse\r\n\t\t\t\tthis.partnerWindow.focus();\r\n\r\n\t\t\treturn this.waitForPartnerWindowCloseAsync()\r\n\t\t\t\t.then(redirectedToPartner => {\r\n\t\t\t\t\treturn this.storageService.getPhotoStoresAsync(context.pointOfSaleId, context.languageCode)\r\n\t\t\t\t\t\t.then(photostores => {\r\n\t\t\t\t\t\t\tconst selectedstore = photostores ? utils.findFirst(photostores, s => s.code === store.code) : undefined;\r\n\t\t\t\t\t\t\tif (selectedstore && !selectedstore.isConnected && redirectedToPartner) {\r\n\t\t\t\t\t\t\t\t// seems we are not connected yet, start polling\r\n\t\t\t\t\t\t\t\t// EDGE: the partner window might say it's closed while it's actually still open on partner site\r\n\t\t\t\t\t\t\t\treturn utils.waitAsync(5000).then(() => { return this.retryGetConnectedPhotoStore(selectedstore, 10); });\r\n\t\t\t\t\t\t\t} else\r\n\t\t\t\t\t\t\t\treturn selectedstore;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate static retryGetConnectedPhotoStore(selectedStore: IPhotoStore, maxNumberOfRetry: number, retry = 0): JQueryPromise {\r\n\t\t\treturn this.storageService.getPhotoStoresAsync(context.pointOfSaleId, context.languageCode, false, false, false, maxNumberOfRetry, retry)\r\n\t\t\t\t.then(photostores => {\r\n\t\t\t\t\tconst store: IPhotoStore | undefined = photostores ? utils.findFirst(photostores, s => s.code === selectedStore.code) : undefined;\r\n\t\t\t\t\tif (!store) return undefined;\r\n\r\n\t\t\t\t\tif (!store.isConnected && retry < maxNumberOfRetry) {\r\n\t\t\t\t\t\treturn utils.waitAsync(2000).then(() => this.retryGetConnectedPhotoStore(selectedStore, maxNumberOfRetry, retry + 1));\r\n\t\t\t\t\t} else if (store.isConnected) {\r\n\t\t\t\t\t\treturn store;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate static waitForPartnerWindowCloseAsync(delay = 100, counter = 1, leftDomain = false, maxDelay = 60000): JQueryPromise {\r\n\t\t\tlet factor;\r\n\t\t\tif (counter % 10 === 0) {\r\n\t\t\t\tfactor = counter / 10;\r\n\t\t\t\tdelay = 100 * factor;\r\n\t\t\t}\r\n\r\n\t\t\tif (delay > maxDelay)\r\n\t\t\t\tdelay = maxDelay;\r\n\r\n\t\t\tcounter++;\r\n\r\n\t\t\treturn utils.waitAsync(delay)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\t// here we check if the partner window is still open or not\r\n\t\t\t\t\t\t// warning: on edge, any reference to the partnerwindow is lost (or not permitted)\r\n\t\t\t\t\t\t// as soon as we leave our domain => therefor: try -> catch\r\n\t\t\t\t\t\tif ((this.partnerWindow && this.partnerWindow.document && this.partnerWindow.document.domain === document.domain && leftDomain) || (this.partnerWindow && this.partnerWindow.closed) || !this.partnerWindow) {\r\n\t\t\t\t\t\t\t// few cases to get here:\r\n\t\t\t\t\t\t\t// - we are back on our own domain after we got redirected from the partner site\r\n\t\t\t\t\t\t\t// - the partner window was closed\r\n\t\t\t\t\t\t\tthis.partnerWindow = null;\r\n\t\t\t\t\t\t\treturn $.Deferred().resolve(leftDomain).promise();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t// the partner window is still open\r\n\t\t\t\t\t\t\treturn this.waitForPartnerWindowCloseAsync(delay, counter, leftDomain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tif (e.name === \"SecurityError\") {\r\n\t\t\t\t\t\t\t// some browser nicely throw this error when we are trying to access\r\n\t\t\t\t\t\t\t// properties of the partnerwindow when the partnerwindow is showing the partner site\r\n\t\t\t\t\t\t\t// => wait until we are back on our domain (pass TRUE since we have left our domain)\r\n\t\t\t\t\t\t\treturn this.waitForPartnerWindowCloseAsync(delay, counter, true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// AAARCH!!! we probably are on edge browser :(\r\n\t\t\t\t\t\t// we get here as soon as the partnerwindow redirect to partner site\r\n\t\t\t\t\t\t// just stop checking here (else we get endless loop)\r\n\t\t\t\t\t\t// only way to get notified of successful connection is to start polling\r\n\t\t\t\t\t\t// the photostores and see if this store suddenly get connected\r\n\t\t\t\t\t\treturn $.Deferred().resolve(true).promise();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n"],"names":["eXpress","core","PhotoStoreConnector","connectToAsync","store","storageService","this","isConnected","hasAlbumAccess","$","Deferred","resolve","promise","partners","PartnerStore","connectToPartnerStoreAsync","connectToSmartphotoStoreAsync","showLoadingDialogAsync","LoginPopup","createDialogAsync","then","$popup","openAsync","loginResult","connectedUserName","accountName","_this","url","locatePhotosUrl","windowSize","html","getWindowSize","partnerWindow","closed","window","open","concat","width","height","focus","waitForPartnerWindowCloseAsync","redirectedToPartner","getPhotoStoresAsync","context","pointOfSaleId","languageCode","photostores","selectedstore","utils","findFirst","s","code","undefined","waitAsync","retryGetConnectedPhotoStore","selectedStore","maxNumberOfRetry","retry","delay","counter","leftDomain","maxDelay","document","domain","e","name"],"mappings":"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"}