{"version":3,"file":"selectphotoalbum.min.js","sources":["selectphotoalbum.ts"],"sourcesContent":["namespace eXpress.core {\r\n\texport interface ISelectPhotoAlbumOptions {\r\n\t\titemCssClass: string;\r\n\t\tcontainerOpenCssClass: string;\r\n\t\treadonly scrollContainerEl?: HTMLElement;\r\n\t\treadonly scrollContainerHeight?: () => number;\r\n\t}\r\n\r\n\texport interface ISelectPhotoAlbumDependencies {\r\n\t\tcontentManager: ContentManager;\r\n\t\tstorageService: services.StorageService;\r\n\t}\r\n\r\n\texport class SelectPhotoAlbum implements IPanel<IPhotoFolder | undefined> {\r\n\t\tprivate readonly options: ISelectPhotoAlbumOptions;\r\n\t\tprivate readonly contentManager: ContentManager;\r\n\r\n\t\tprivate readonly containerEl: HTMLElement;\r\n\t\tprivate readonly placeholderEl: HTMLElement;\r\n\r\n\t\tprivate $deferred: JQueryDeferred<IPhotoFolder | undefined>;\r\n\r\n\t\tprivate folders: IPhotoFolder[] | null;\r\n\r\n\t\tprivate eventsDisposable?: IDisposable;\r\n\t\tprivate showAlbum: boolean;\r\n\r\n\t\tconstructor(containerEl: HTMLElement, deps: ISelectPhotoAlbumDependencies, options: ISelectPhotoAlbumOptions) {\r\n\t\t\tthis.options = options;\r\n\r\n\t\t\tthis.contentManager = deps.contentManager;\r\n\r\n\t\t\tthis.containerEl = containerEl;\r\n\t\t\tthis.placeholderEl = eXpress.html.hasClass(containerEl, \"placeholder\") ? containerEl : containerEl.querySelector('.placeholder') as HTMLElement;\r\n\t\t\tif (!this.placeholderEl)\r\n\t\t\t\tthrow new Error(\"The containerEl must have a class 'placeholder' or must container a child element with a class 'placeholder'\");\r\n\t\t}\r\n\r\n\t\tprivate init() {\r\n\t\t\tconst eventListeners = [\r\n\t\t\t\thtml.addEventListener(this.placeholderEl, 'click', e => {\r\n\t\t\t\t\tconst targetEl = e.target as HTMLElement;\r\n\t\t\t\t\tconst albumEl = targetEl.closest('.' + this.options.itemCssClass);\r\n\t\t\t\t\tif (albumEl && this.folders) {\r\n\t\t\t\t\t\tconst folderCodeAttribute = albumEl.getAttribute(\"data-folder-id\");\r\n\t\t\t\t\t\tthis.close(utils.findFirst(this.folders, f => f.id === folderCodeAttribute));\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t];\r\n\r\n\t\t\tif (this.options.scrollContainerHeight && this.options.scrollContainerEl) {\r\n\t\t\t\teventListeners.push(\r\n\t\t\t\t\thtml.addEventListener(window, \"resize\", this.setScrollContainerHeight.bind(this)),\r\n\t\t\t\t\thtml.addEventListener(window, \"orientationchange\", this.setScrollContainerHeight.bind(this))\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tthis.eventsDisposable = utils.compositeDisposable(eventListeners);\r\n\t\t}\r\n\r\n\t\tprivate deinit() {\r\n\t\t\tif (this.eventsDisposable) this.eventsDisposable.dispose();\r\n\t\t}\r\n\r\n\t\tpublic close(value: IPhotoFolder | undefined) {\r\n\t\t\thtml.removeClass(this.containerEl, this.options.containerOpenCssClass);\r\n\t\t\tthis.deinit();\r\n\t\t\tthis.$deferred.resolve(value);\r\n\t\t}\r\n\r\n\t\tpublic hasFolders = () => this.folders;\r\n\r\n\t\tpublic createAsync(store: IPhotoStore): JQueryPromise<void> {\r\n\t\t\tthis.showAlbum = store.showAlbum;\r\n\r\n\t\t\t// todo: use labels from options \r\n\t\t\tconst pLabels = this.contentManager.getLabelsAsync(\r\n\t\t\t\t[\r\n\t\t\t\t\t\"Label.MyPages.Main.MyAlbums.Overview\",\r\n\t\t\t\t\t\"Label.MyPages.MyAlbums.NumberOfPhotos\",\r\n\t\t\t\t\t\"Label.ResponsivePrintForm.Import.Import\",\r\n\t\t\t\t\t\"Label.ResponsivePrintForm.Import.NoAlbums\",\r\n\t\t\t\t\t\"Label.ResponsivePrintForm.Import.Error\"\r\n\t\t\t\t]);\r\n\r\n\t\t\tconst pFolders = store.getFoldersAsync()\r\n\t\t\t\t.then(folders => this.folders = !folders ? null : folders.filter(folder => folder.fileCount !== 0));\r\n\r\n\t\t\treturn $.when<any>(pLabels, pFolders).then(() => {\r\n\t\t\t\treturn;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tpublic openAsync<PhotoFolder>() {\r\n\t\t\thtml.addClass(this.containerEl, this.options.containerOpenCssClass);\r\n\r\n\t\t\tthis.$deferred = $.Deferred<IPhotoFolder | undefined>();\r\n\t\t\tconst renderedFolderEls = this.placeholderEl.querySelectorAll('.' + this.options.itemCssClass);\r\n\r\n\t\t\tif (!this.folders) {\r\n\t\t\t\tthis.placeholderEl.insertAdjacentHTML(\"beforeend\", `<div class=\"erorr\">${this.contentManager.getLabel(\"Label.ResponsivePrintForm.Import.Error\")}</div>`);\r\n\t\t\t\tconst tokenexpiry = html.querySelector(document, '.technical-tokenexpiry', false);\r\n\t\t\t\tif (tokenexpiry) tokenexpiry.remove(); // remove token expiry => no reason to show it when no albums\r\n\t\t\t\treturn this.$deferred;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.showAlbum && this.folders[0]) {\r\n\t\t\t\tthis.close(this.folders[0]);\r\n\t\t\t\treturn this.$deferred;\r\n\t\t\t}\r\n\t\t\t// remove previous rendered folders\r\n\t\t\tfor (let i = 0; i < renderedFolderEls.length; i++) {\r\n\t\t\t\tconst itemEl = renderedFolderEls.item(i);\r\n\t\t\t\thtml.remove(itemEl);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.folders.length > 0) {\r\n\t\t\t\t// add new rendered folders to container\r\n\t\t\t\tconst folderCoversHtml = this.folders.map(folder => this.getFolderCoverTemplate(folder)).join('');\r\n\t\t\t\tthis.placeholderEl.insertAdjacentHTML(\"beforeend\", folderCoversHtml);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.placeholderEl.insertAdjacentHTML(\"beforeend\", `<div class=\"no-albums\">${this.contentManager.getLabel(\"Label.ResponsivePrintForm.Import.NoAlbums\")}</div>`);\r\n\t\t\t}\r\n\r\n\t\t\tthis.setScrollContainerHeight();\r\n\t\t\tthis.init();\r\n\r\n\r\n\t\t\treturn this.$deferred;\r\n\t\t}\r\n\r\n\t\tprivate setScrollContainerHeight() {\r\n\t\t\tif (!this.options.scrollContainerEl || !this.options.scrollContainerHeight) return;\r\n\t\t\tthis.options.scrollContainerEl.style.height = this.options.scrollContainerHeight() + \"px\";\r\n\t\t}\r\n\r\n\t\tprivate getFolderCoverTemplate(folder: IPhotoFolder): string {\r\n\t\t\tlet nrOfPhotos = this.contentManager.getLabel(\"Label.MyPages.MyAlbums.NumberOfPhotos\");\r\n\t\t\tnrOfPhotos = utils.formatString(nrOfPhotos, folder.fileCount.toString());\r\n\r\n\t\t\tlet meta = '';\r\n\t\t\tif (folder.dateCreated && folder.dateCreated > new Date(1970, 1) && folder.dateCreated <= new Date())\r\n\t\t\t\tmeta = folder.dateCreated.toLocaleDateString();\r\n\t\t\tif (folder.fileCount >= 0) {\r\n\t\t\t\tif (meta)\r\n\t\t\t\t\tmeta += \" - \";\r\n\t\t\t\tmeta += nrOfPhotos;\r\n\t\t\t}\r\n\r\n\t\t\treturn `<div class=\"item ${this.options.itemCssClass}\" data-folder-id=\"${folder.id}\">\r\n\t\t\t\t\t<div class=\"item-container ${!folder.mediumUrl ? `empty` : \"\"}\">\r\n\t\t\t\t\t\t<div class=\"title\">\r\n\t\t\t\t\t\t\t<span class=\"name\">${folder.name}</span>\r\n\t\t\t\t\t\t\t<span class=\"meta\">${meta}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t${folder.mediumUrl ? `<img src=\"${folder.mediumUrl}\">` : \"\"}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>`;\r\n\t\t}\r\n\t}\r\n}\r\n"],"names":["eXpress","core","SelectPhotoAlbum","containerEl","deps","options","_this","this","hasFolders","folders","contentManager","placeholderEl","html","hasClass","querySelector","Error","prototype","init","eventListeners","addEventListener","e","albumEl","target","closest","itemCssClass","folderCodeAttribute_1","getAttribute","close","utils","findFirst","f","id","scrollContainerHeight","scrollContainerEl","push","window","setScrollContainerHeight","bind","eventsDisposable","compositeDisposable","deinit","dispose","value","removeClass","containerOpenCssClass","$deferred","resolve","createAsync","store","showAlbum","pLabels","getLabelsAsync","pFolders","getFoldersAsync","then","filter","folder","fileCount","$","when","openAsync","addClass","Deferred","renderedFolderEls","querySelectorAll","insertAdjacentHTML","concat","getLabel","tokenexpiry","document","remove","i","length","itemEl","item","folderCoversHtml","map","getFolderCoverTemplate","join","style","height","nrOfPhotos","formatString","toString","meta","dateCreated","Date","toLocaleDateString","mediumUrl","name"],"mappings":"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"}