{"version":3,"file":"selectphotos.min.js","sources":["selectphotos.ts"],"sourcesContent":["declare const rowGrid: any;\r\n\r\ninterface IRowGridOptions {\r\n\tresize: boolean;\r\n\tminMargin?: number;\r\n\tmaxMargin?: number;\r\n\titemSelector: string;\r\n\tfirstItemClass: string;\r\n}\r\n\r\nnamespace eXpress.core {\r\n\r\n\texport interface ISelectPhotosActions {\r\n\t\treadonly selectionChanged?: (totalPhotos: number, totalSelected: number, selectAll: boolean) => void;\r\n\t\treadonly albumRenamed?: (name: string) => void;\r\n\t\treadonly photoClicked?: (photoId: string, closeHandler: () => void) => void;\r\n\t\treadonly deleteClicked?: (photoId: string) => void;\r\n\t\treadonly onVisible?: () => void;\r\n\t}\r\n\r\n\texport interface ISelectPhotosOptions {\r\n\t\treadonly readOnly: boolean;\r\n\t\tsortOptions: IPhotoSortOptions;\r\n\t\treadonly thumbRenderHook?: ($thumb: JQuery, fileId: string) => JQuery;\r\n\t\treadonly allThumbsRenderedHook?: ($container: JQuery) => JQuery;\r\n\t\treadonly photoIdFilter?: (photoId: string | undefined) => boolean;\r\n\t\treadonly photoNameFilter?: (photoId: string | undefined) => boolean;\r\n\t\treadonly itemClass?: string;\r\n\t\treadonly itemNotSelectableClass?: string;\r\n\t\treadonly pageSize?: number;\r\n\t\treadonly scrollContainerEl?: HTMLElement;\r\n\t\treadonly scrollContainerHeight?: () => number;\r\n\t}\r\n\r\n\texport class SelectPhotos implements IPanel<void> {\r\n\t\tprivate readonly css = {\r\n\t\t\titem: {\r\n\t\t\t\tselected: \"selected\",\r\n\t\t\t\tnotSelected: \"not-selected\", // overrides allSelected of the container element\r\n\t\t\t\timageError: \"no-image\"\r\n\t\t\t},\r\n\t\t\tcontainer: {\r\n\t\t\t\tallSelected: \"all-selected\",\r\n\t\t\t\tisActive: \"active\"\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tpublic folder: eXpress.core.IPhotoFolder;\r\n\t\tprivate photoEls: { [id: string]: JQuery | undefined } = {};\r\n\t\tpublic photos: AnyPhoto[];\r\n\t\tprivate filteredPhotoIds: string[];\r\n\r\n\t\t/**\r\n\t\t * Deprecated: the $container should be managed outside selectphotos, use $placeholder instead.\r\n\t\t */\r\n\t\tprivate readonly $container: JQuery;\r\n\t\tprivate readonly $placeholder: JQuery;\r\n\t\tprivate readonly storageService: services.StorageService;\r\n\t\tprivate selectedPhotoIds: string[];\r\n\t\tprivate selectAllWasActive: boolean;\r\n\r\n\t\tprivate currentSelectedPhotoIndex: number | undefined;\r\n\r\n\t\tprivate page: number;\r\n\t\tprivate readonly pageSize: number;\r\n\t\tprivate pageToken: string;\r\n\r\n\t\tprivate readonly rowGridOptions: IRowGridOptions;\r\n\t\tprivate readonly minGridItemHeight: number;\r\n\r\n\t\tprivate readonly itemClass: string;\r\n\t\tprivate readonly itemNotSelectableClass: string;\r\n\t\tprivate readonly itemSelector: string;\r\n\r\n\t\tprivate readonly handlers?: ISelectPhotosActions;\r\n\t\tprivate readonly options: ISelectPhotosOptions;\r\n\r\n\t\tprivate scrollEventDisposable?: IDisposable;\r\n\r\n\t\tprivate selectAll: boolean;\r\n\r\n\t\tprivate $deferred: JQueryDeferred<void>;\r\n\r\n\t\tprivate eventsDisposable?: IDisposable;\r\n\r\n\t\tprivate blocker: boolean;\r\n\r\n\t\tconstructor($container: JQuery,\r\n\t\t\tstorageService: services.StorageService,\r\n\t\t\toptions: ISelectPhotosOptions,\r\n\t\t\thandlers?: ISelectPhotosActions) {\r\n\t\t\tthis.$container = $container;\r\n\t\t\tthis.$placeholder = $container.hasClass(\"placeholder\") ? $container : $container.find(\".placeholder\");\r\n\t\t\tthis.storageService = storageService;\r\n\r\n\t\t\tthis.itemClass = options.itemClass || \"photo\";\r\n\t\t\tthis.itemNotSelectableClass = options.itemNotSelectableClass || \"disabled\";\r\n\t\t\tthis.itemSelector = `.item.${this.itemClass}:not(.${this.itemNotSelectableClass})`;\r\n\r\n\t\t\tthis.handlers = handlers;\r\n\t\t\tthis.options = options;\r\n\r\n\t\t\tthis.page = 0;\r\n\t\t\tthis.pageSize = options.pageSize || 60;\r\n\t\t\tthis.pageToken = '';\r\n\r\n\t\t\t// TODO: rowgrid option should be passed in constructor\r\n\t\t\t// below code contains itemSelector which will ignore notSelectableItems by default\r\n\t\t\t// calls to redrawGrid(itemSelector?: string) can redraw grid with other itemSelector\r\n\t\t\tthis.rowGridOptions = { resize: true, minMargin: 10, maxMargin: 11, itemSelector: `.item:not(.${this.itemNotSelectableClass})`, firstItemClass: \"first-item\" };\r\n\t\t\tthis.minGridItemHeight = 300;\r\n\r\n\t\t\tthis.selectedPhotoIds = [];\r\n\t\t\tthis.selectAllWasActive = false;\r\n\t\t}\r\n\r\n\t\tprivate init(): void {\r\n\t\t\tthis.$placeholder.on(\"click\", \".icon-selected\", (e) => { this.selectPhotoClickEvent(e); });\r\n\t\t\tthis.$placeholder.on(\"click\", \".icon-delete\", (e) => { this.deletePhotoClickEvent(e); return false; });\r\n\t\t\tthis.$placeholder.on(\"click\", this.itemSelector, (e) => { this.shiftSelect(e); });\r\n\t\t\tthis.$placeholder.on(\"click\", this.itemSelector, (e) => { this.photoClickEvent(e); });\r\n\r\n\t\t\tif (this.options.scrollContainerHeight && this.options.scrollContainerEl) {\r\n\t\t\t\tthis.eventsDisposable = utils.compositeDisposable([\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.bindScrollEvent();\r\n\t\t}\r\n\r\n\t\tprivate deinit(): void {\r\n\t\t\tthis.$placeholder.off();\r\n\t\t\tthis.unbindScrollEvent();\r\n\t\t\tif (this.eventsDisposable) this.eventsDisposable.dispose();\r\n\t\t}\r\n\r\n\t\tprivate getPhotosAsync(combineResultWith?: AnyPhoto[]): JQueryPromise<AnyPhoto[]> {\r\n\t\t\treturn this.folder.getPhotosAsync(this.page, this.pageSize, this.options.sortOptions.sortBy, this.options.sortOptions.sortOrder, this.pageToken)\r\n\t\t\t\t.then(photosInFolder => {\r\n\r\n\t\t\t\t\tconst lastItem = photosInFolder[photosInFolder.length - 1];\r\n\t\t\t\t\tconst lastItemPageToken = (lastItem as partners.PartnerPhoto)?.pageToken;\r\n\t\t\t\t\tif (lastItemPageToken) {\r\n\t\t\t\t\t\tthis.pageToken = lastItemPageToken;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst newPhotosWithCombinedResults = [...(combineResultWith || []), ...(photosInFolder || [])];\r\n\t\t\t\t\tif (newPhotosWithCombinedResults.length < this.pageSize) return newPhotosWithCombinedResults;\r\n\t\t\t\t\tconst numberOfFilteredPhotos = this.getFilteredPhotos(photosInFolder).length;\r\n\t\t\t\t\tif (numberOfFilteredPhotos < (this.pageSize - this.pageSize / 3) && !this.areAllPhotosLoaded(newPhotosWithCombinedResults.length)) {\r\n\t\t\t\t\t\tthis.page++;\r\n\t\t\t\t\t\treturn this.getPhotosAsync(newPhotosWithCombinedResults);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn newPhotosWithCombinedResults;\r\n\t\t\t\t}, () => {\r\n\t\t\t\t\tthrow new Error(utils.formatString(\"albumphotos: could not get photos for folder: {0}, page: {1}, pagesize: {2}\", this.folder.id ? this.folder.id : this.folder.code || \"\", this.page.toString(), this.pageSize.toString()));\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate addPhotos(photos?: AnyPhoto[]) {\r\n\t\t\tif (!this.photos)\r\n\t\t\t\tthis.photos = [];\r\n\r\n\t\t\tphotos = photos || [];\r\n\r\n\t\t\tthis.photos = [...this.photos, ...photos];\r\n\r\n\t\t\tthis.filteredPhotoIds = [...(this.filteredPhotoIds || []), ...this.getFilteredPhotos(photos).map(p => p.code)];\r\n\t\t}\r\n\r\n\t\tprivate renderPhoto(photo: eXpress.core.IPhoto, img: HTMLImageElement, update = false) {\r\n\t\t\tif (!photo || (this.photoEls[photo.code] !== undefined || update))\r\n\t\t\t\treturn;\r\n\r\n\t\t\tlet $template = $(`\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<div class=\"actions\">\r\n\t\t\t\t\t\t<span class=\"icon-selected\" data-icon=\"&#xe014;\" aria-hidden=\"true\"></span>\r\n\t\t\t\t\t\t<span class=\"icon-delete\" data-icon=\"&#xe00e;\" aria-hidden=\"true\"></span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>`\r\n\t\t\t);\r\n\r\n\t\t\tif (this.options.readOnly)\r\n\t\t\t\t$template.find(\".actions .icon-delete\").remove();\r\n\r\n\t\t\tconst classes = [\"item\", this.itemClass];\r\n\t\t\tif (img.className === \"error\")\r\n\t\t\t\tclasses.push(this.css.item.imageError);\r\n\t\t\tif (this.selectAll || this.selectAllWasActive) {\r\n\t\t\t\tclasses.push(this.css.item.selected);\r\n\t\t\t\tthis.selectedPhotoIds.push(photo.code);\r\n\r\n\t\t\t\tif (this.folder.fileCount < 0)\r\n\t\t\t\t\tthis.selectionChanged(this.selectedPhotoIds.length);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selectionChanged(this.selectedPhotoIds.length);\r\n\t\t\t}\r\n\r\n\r\n\t\t\t$template.addClass(classes.join(\" \"));\r\n\r\n\t\t\tif (img.className === \"error\")\r\n\t\t\t\t$template.addClass(this.css.item.imageError);\r\n\r\n\t\t\t$template.attr(\"data-photo-id\", photo.code);\r\n\r\n\t\t\tconst $img = $(img).clone();\r\n\t\t\t$template.append($img);\r\n\r\n\t\t\tthis.UpdateImageSize(photo, $img[0]);\r\n\r\n\t\t\t// allow the caller to modify the template\r\n\t\t\tif (this.options.thumbRenderHook)\r\n\t\t\t\t$template = this.options.thumbRenderHook($template, photo.code);\r\n\r\n\t\t\tif (this.options.photoNameFilter && this.options.photoIdFilter) {\r\n\t\t\t\t$template.toggleClass(this.itemNotSelectableClass, !this.options.photoNameFilter(photo.code) || !this.options.photoIdFilter(photo.code));\r\n\t\t\t}\r\n\r\n\t\t\tif (update) {\r\n\t\t\t\tconst $photo = this.photoEls[photo.code];\r\n\t\t\t\tif (!$photo) throw new Error('Cant update photo. It does not exist in dictionary.');\r\n\r\n\t\t\t\t$photo.replaceWith($template);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.photoEls[photo.code] = $template.insertBefore(this.$placeholder.find(\".clear\"));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic loadNextPageAsync(): JQueryPromise<IPhotoWithLoadedImage[]> {\r\n\t\t\tif (!this.areAllPhotosLoaded() || this.folder.fileCount === -1) {\r\n\t\t\t\tthis.page++;\r\n\t\t\t\treturn this.getPhotosAsync().then(nextPhotos => {\r\n\t\t\t\t\tconst returnVal: IPhotoWithLoadedImage[] = [];\r\n\r\n\t\t\t\t\tif (this.page === 1 && nextPhotos.length === 0) {\r\n\t\t\t\t\t\tthis.folder.fileCount = 0;\r\n\t\t\t\t\t\treturn returnVal;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.addPhotos(nextPhotos);\r\n\r\n\t\t\t\t\tnextPhotos.forEach(photo => {\r\n\t\t\t\t\t\tconst image = new Image(photo.width, photo.height);\r\n\t\t\t\t\t\timage.src = photo.mediumUrl;\r\n\r\n\t\t\t\t\t\tthis.renderPhoto(photo, image);\r\n\r\n\t\t\t\t\t\treturnVal.push({ photo, image });\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (this.options.allThumbsRenderedHook) {\r\n\t\t\t\t\t\tthis.options.allThumbsRenderedHook(this.$placeholder);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn returnVal;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn $.Deferred<IPhotoWithLoadedImage[]>().resolve([]).promise();\r\n\t\t}\r\n\r\n\t\tpublic openAsync(rowGridItemClass?: string): JQueryPromise<void> {\r\n\t\t\t// TODO: move to onVisible of ISelectPhotoActions so the caller can set css class active on container when needed.\r\n\t\t\t// SelectPhotos doesn't need to know the container.\r\n\t\t\tthis.$container.addClass(\"active\");\r\n\t\t\tif (this.handlers && this.handlers.onVisible) this.handlers.onVisible();\r\n\r\n\t\t\trowGrid(this.$placeholder[0], rowGridItemClass ? { ...this.rowGridOptions, itemSelector: rowGridItemClass } : this.rowGridOptions);\r\n\t\t\tthis.toggleAllPhotos(false);\r\n\r\n\t\t\tthis.setScrollContainerHeight();\r\n\r\n\t\t\tthis.init();\r\n\r\n\t\t\treturn this.$deferred = $.Deferred<void>();\r\n\t\t}\r\n\r\n\t\tprivate showHideNoPhotosMessage(): void {\r\n\t\t\t$(\".gallery-photos-container .no-item\").toggle(!this.photos || this.photos.length === 0);\r\n\t\t}\r\n\r\n\t\tpublic getSelectedPhotoIds(): string[] {\r\n\t\t\treturn this.selectedPhotoIds;\r\n\t\t}\r\n\r\n\t\tprivate GetDeselected(): { deselected: boolean, numberOfFilesSelected: number } {\r\n\t\t\tconst deselected = this.folder.fileCount > 0  && (this.selectAllWasActive || (this.areAllPhotosLoaded() && this.selectedPhotoIds.length > (this.folder.fileCount / 2)));\r\n\t\t\treturn {\r\n\t\t\t\tdeselected: deselected,\r\n\t\t\t\tnumberOfFilesSelected: deselected ? this.folder.fileCount - (this.photos.length - this.selectedPhotoIds.length) : this.selectedPhotoIds.length\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tpublic getSelectedPhotosAsync(): JQueryPromise<AnyPhoto[]> {\r\n\t\t\tlet result: AnyPhoto[] = [];\r\n\r\n\t\t\tconst useDeselected = this.GetDeselected().deselected;\r\n\t\t\tif (this.folder instanceof core.partners.PartnerFolder) {\r\n\t\t\t\tif (this.areAllPhotosLoaded() && this.selectedPhotoIds.length === this.folder.fileCount) {\r\n\t\t\t\t\tresult = this.getFilteredPhotos(this.photos) as partners.PartnerPhoto[];\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst photoIds = useDeselected ? this.photos.filter(x => !this.selectedPhotoIds.includes(x.code)).map(x => x.code) : this.selectedPhotoIds;\r\n\t\t\t\t\tif (useDeselected) {\r\n\t\t\t\t\t\tthis.$placeholder.find(`.${this.itemClass}.${this.css.item.notSelected}`).each((index, el) => {\r\n\t\t\t\t\t\t\tphotoIds.push(el.dataset.photoId ?? \"\");\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn this.storageService.getPartnerPhotosAsync(context.pointOfSaleId, GetCookie(\"accid\"), this.folder.storeType, this.folder.id, photoIds, this.selectAll, useDeselected)\r\n\t\t\t\t\t\t.then(res => res && res.map(r => r as AnyPhoto));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.areAllPhotosLoaded() && this.selectedPhotoIds.length === this.folder.fileCount) {\r\n\t\t\t\t\tresult = this.getFilteredPhotos(this.photos) as Photo[];\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconst selectedFileIds = useDeselected ? this.photos.filter(x => !this.selectedPhotoIds.includes(x.code)).map(x => x.code) : this.selectedPhotoIds;\r\n\t\t\t\t\treturn this.storageService.getPhotosAsync(context.pointOfSaleId, GetCookie(\"accid\"), this.folder.id || \"\", selectedFileIds, useDeselected, this.selectAll);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn $.Deferred<AnyPhoto[]>().resolve(result || []);\r\n\t\t}\r\n\r\n\t\tprivate getFilteredPhotos(photos: AnyPhoto[], extraFilter?: (photo: AnyPhoto) => boolean): AnyPhoto[] {\r\n\r\n\t\t\tif (photos.length === 0 || (!this.options.photoIdFilter && !extraFilter)) {\r\n\t\t\t\treturn photos;\r\n\t\t\t} else {\r\n\t\t\t\treturn photos\r\n\t\t\t\t\t.filter(p =>\r\n\t\t\t\t\t\tp.code\r\n\t\t\t\t\t\t&& (!this.options.photoIdFilter || this.options.photoIdFilter(p.code))\r\n\t\t\t\t\t\t&& (!extraFilter || extraFilter(p))\r\n\t\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic createAsync(folder: IPhotoFolder, sortOptions?: IPhotoSortOptions): JQueryPromise<IPhotoFolder> {\r\n\t\t\tthis.folder = folder;\r\n\t\t\tthis.clear();\r\n\t\t\tthis.page = 0;\r\n\t\t\tthis.pageToken = '';\r\n\t\t\tthis.options.sortOptions = sortOptions ? sortOptions : this.options.sortOptions;\r\n\r\n\t\t\t// we need the file count for the current folder before loading the requested page.\r\n\t\t\tthis.folder.fileCount = folder.fileCount;\r\n\t\t\tthis.selectionChanged(0);\r\n\t\t\treturn this.loadNextPageAsync().then(() => {\r\n\t\t\t\tthis.showHideNoPhotosMessage();\r\n\t\t\t\treturn this.folder;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tprivate selectionChanged(numberOfSelectedPhotos: number) {\r\n\t\t\tif (this.handlers && this.handlers.selectionChanged) {\r\n\t\t\t\tlet fileCount = this.folder.fileCount;\r\n\t\t\t\tif (fileCount <= 0) {\r\n\t\t\t\t\tfileCount = this.filteredPhotoIds.length;\r\n\t\t\t\t}\r\n\t\t\t\tthis.handlers.selectionChanged(fileCount, numberOfSelectedPhotos, this.filteredPhotoIds && numberOfSelectedPhotos >= this.filteredPhotoIds.length);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic clear() {\r\n\t\t\tthis.$placeholder.find(\".item.\" + this.itemClass).remove();\r\n\t\t\tthis.selectAll = false;\r\n\t\t\tthis.$placeholder.removeClass(this.css.container.allSelected);\r\n\t\t\tthis.photos = [];\r\n\t\t\tthis.photoEls = {};\r\n\t\t\tthis.selectedPhotoIds = [];\r\n\t\t\tthis.filteredPhotoIds = [];\r\n\t\t\tthis.selectionChanged(0);\r\n\r\n\t\t\t// reset scroll position\r\n\t\t\tif (this.options.scrollContainerEl) this.options.scrollContainerEl.scrollTop = 0;\r\n\r\n\t\t\tthis.currentSelectedPhotoIndex = undefined;\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 shiftSelect(event: JQuery.ClickEvent): void {\r\n\t\t\tif (event.shiftKey) {\r\n\t\t\t\t// stop other events when pressing shift while clicking\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\r\n\t\t\t\t// itemSelector will skip non selectable photos\r\n\t\t\t\tconst $photoItems = this.$placeholder.find(this.itemSelector);\r\n\r\n\t\t\t\tconst targetIndex = $photoItems.index(event.currentTarget);\r\n\r\n\t\t\t\tconst allIds = $.map<HTMLElement, string>($photoItems.toArray(), p => p!.getAttribute(\"data-photo-id\")!);\r\n\r\n\t\t\t\tif (this.selectedPhotoIds.includes(allIds[targetIndex])) {\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * if the target photo is selected: shift select will UNSELECT all the photos below the\r\n\t\t\t\t\t * target photo that are part of the sequence of selected photos that the target belongs to\r\n\t\t\t\t\t */\r\n\t\t\t\t\tlet indexOfBottomSelectedSequence = targetIndex;\r\n\t\t\t\t\tfor (let i = targetIndex + 1; i < allIds.length; i++) {\r\n\t\t\t\t\t\tconst isSelected = this.selectedPhotoIds.includes(allIds[i]);\r\n\t\t\t\t\t\tif (!isSelected) break;\r\n\t\t\t\t\t\tindexOfBottomSelectedSequence = i;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst $unselected = $photoItems.slice(targetIndex + 1, indexOfBottomSelectedSequence + 1);\r\n\t\t\t\t\tconst shiftUnselectedIds = $.map<HTMLElement, string>($unselected.toArray(), p => p!.getAttribute(\"data-photo-id\")!);\r\n\t\t\t\t\tthis.selectedPhotoIds = this.selectedPhotoIds.filter(item => !shiftUnselectedIds.includes(item));\r\n\t\t\t\t\t$unselected.toggleClass(this.css.item.selected, false);\r\n\t\t\t\t\t$unselected.toggleClass(this.css.item.notSelected, true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t/**\r\n\t\t\t\t\t * if the target photo is NOT selected: shift select will SELECT\r\n\t\t\t\t\t * all photos starting from the first selected photo above\r\n\t\t\t\t\t * the target photo to the target photo\r\n\t\t\t\t\t * (or from index 0 if no photo is selected above the target)\r\n\t\t\t\t\t */\r\n\t\t\t\t\tlet firstSelectedIndexAboveTarget = -1;\r\n\t\t\t\t\tfor (let i = targetIndex - 1; i >= 0; i--) {\r\n\t\t\t\t\t\tconst isSelected = this.selectedPhotoIds.includes(allIds[i]);\r\n\t\t\t\t\t\tif (isSelected) {\r\n\t\t\t\t\t\t\tfirstSelectedIndexAboveTarget = i;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst $selected = $photoItems.slice(firstSelectedIndexAboveTarget + 1, targetIndex + 1);\r\n\t\t\t\t\tconst shiftSelectedIds = $.map<HTMLElement, string>($selected.toArray(), p => p!.getAttribute(\"data-photo-id\")!);\r\n\t\t\t\t\tthis.selectedPhotoIds = this.selectedPhotoIds.concat(shiftSelectedIds);\r\n\t\t\t\t\t$selected.toggleClass(this.css.item.notSelected, false);\r\n\t\t\t\t\t$selected.toggleClass(this.css.item.selected, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.selectionChanged(this.selectedPhotoIds.length);\r\n\r\n\t\t\t\t// overwritten the default selection\r\n\t\t\t\tthis.updateSelectAllProperties(false);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// event handlers\r\n\t\tpublic closeHandler = () => {\r\n\t\t\tthis.blocker = false;\r\n\t\t};\r\n\r\n\t\tprivate photoClickEvent(event: JQuery.ClickEvent): void {\r\n\t\t\tconst $item = $(event.currentTarget as HTMLElement);\r\n\t\t\tconst $items = this.$placeholder.find(this.itemSelector);\r\n\r\n\t\t\tif (this.handlers && this.handlers.photoClicked && this.selectedPhotoIds.length < 1) {\r\n\t\t\t\tif (this.blocker)\r\n\t\t\t\t\treturn;\r\n\t\t\t\tthis.blocker = true;\r\n\r\n\t\t\t\tthis.handlers.photoClicked($item.attr(\"data-photo-id\")!, this.closeHandler);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.currentSelectedPhotoIndex = $items.index($item);\r\n\t\t\t\tthis.toggleSinglePhoto(!this.isItemSelected($item), $item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate isItemSelected($item: JQuery) {\r\n\t\t\tconst { container: { allSelected }, item: { selected, notSelected } } = this.css;\r\n\t\t\treturn $item.hasClass(selected) || (this.$placeholder.hasClass(allSelected) && !$item.hasClass(notSelected));\r\n\t\t}\r\n\r\n\t\tprivate selectPhotoClickEvent(event: JQuery.ClickEvent): void {\r\n\r\n\t\t\tconst $item = $(event.currentTarget).parents(\".item\");\r\n\t\t\tconst $items = this.$placeholder.find(this.itemSelector);\r\n\r\n\t\t\tif (!event.shiftKey) {\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\tthis.currentSelectedPhotoIndex = $items.index($item);\r\n\t\t\t\tthis.toggleSinglePhoto(!this.isItemSelected($item), $item);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tprivate deletePhotoClickEvent(event: JQuery.ClickEvent): void {\r\n\t\t\tconst $item = $(event.currentTarget).parents(\".item\");\r\n\t\t\tif (this.handlers && this.handlers.deleteClicked)\r\n\t\t\t\tthis.handlers.deleteClicked($item.attr(\"data-photo-id\")!);\r\n\t\t}\r\n\r\n\t\tprivate bindScrollEvent() {\r\n\t\t\tthis.scrollEventDisposable = html.addEventListener(this.options.scrollContainerEl || window, 'scroll', e => this.scrollEvent(e));\r\n\t\t}\r\n\r\n\t\tprivate unbindScrollEvent() {\r\n\t\t\tif (this.scrollEventDisposable) this.scrollEventDisposable.dispose();\r\n\t\t}\r\n\r\n\t\tprivate scrollEvent(event: UIEvent): void {\r\n\t\t\tif (this.areAllPhotosLoaded())\r\n\t\t\t\treturn;\r\n\r\n\t\t\tconst shouldLoadMore = () => {\r\n\t\t\t\tif (!this.options.scrollContainerEl) {\r\n\t\t\t\t\tconst html = document.documentElement!;\r\n\t\t\t\t\tconst containerHeight = this.$container.height()!;\r\n\t\t\t\t\tconst body = document.body;\r\n\t\t\t\t\tconst documentHeight = Math.max(body.scrollHeight, body.offsetHeight,\r\n\t\t\t\t\t\thtml.clientHeight, html.scrollHeight, html.offsetHeight);\r\n\r\n\t\t\t\t\tconst scrollTop = window.pageYOffset || html.scrollTop;\r\n\t\t\t\t\tconst containerOffset = this.$container[0].getBoundingClientRect().top + html.scrollTop;\r\n\t\t\t\t\tconst margin = documentHeight - (containerHeight + containerOffset);\r\n\t\t\t\t\treturn scrollTop + $(window).height()! >= documentHeight - (margin + 450);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn this.options.scrollContainerEl.scrollTop + this.options.scrollContainerEl.offsetHeight + 250 > this.options.scrollContainerEl.scrollHeight;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tif (shouldLoadMore()) {\r\n\t\t\t\tif (this.unbindScrollEvent) this.unbindScrollEvent();\r\n\t\t\t\tcore.showLoadingDialogAsync(this.loadNextPageAsync()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\tthis.appendedToGrid();\r\n\t\t\t\t\t\tthis.bindScrollEvent();\r\n\t\t\t\t\t}, () => {\r\n\t\t\t\t\t\tthis.bindScrollEvent();\r\n\t\t\t\t\t})\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// update data and ui\r\n\t\tprivate updateSelectAllProperties(shouldSelect: boolean) {\r\n\t\t\tthis.selectAll = shouldSelect;\r\n\t\t\tthis.selectAllWasActive = !shouldSelect\r\n\t\t\t\t? false\r\n\t\t\t\t: this.selectAllWasActive || this.folder.fileCount > 0;\r\n\r\n\t\t\tthis.$placeholder.toggleClass(this.css.container.allSelected, shouldSelect);\r\n\t\t}\r\n\r\n\t\tpublic toggleAllPhotos(shouldSelect: boolean): void {\r\n\t\t\tif (!this.filteredPhotoIds)\r\n\t\t\t\treturn;\r\n\r\n\t\t\t// reset multi select (using shift key)\r\n\t\t\tthis.currentSelectedPhotoIndex = undefined;\r\n\r\n\t\t\tthis.updateSelectAllProperties(shouldSelect);\r\n\r\n\t\t\tif (shouldSelect) {\r\n\t\t\t\t// remove all not-selected classes\r\n\t\t\t\tthis.$placeholder.find(`.${this.itemClass}`).removeClass(this.css.item.notSelected).addClass(this.css.item.selected);\r\n\r\n\t\t\t\tif (this.folder.fileCount > 0) {\r\n\t\t\t\t\tthis.selectedPhotoIds = [...this.filteredPhotoIds]; // use a clone!!!\r\n\r\n\t\t\t\t\tthis.selectionChanged(this.folder.fileCount);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selectedPhotoIds = [...this.filteredPhotoIds]; // use a clone!!!\r\n\t\t\t\t\tthis.selectionChanged(this.selectedPhotoIds.length);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.$placeholder.find(`.${this.itemClass}`).removeClass(this.css.item.selected).addClass(this.css.item.notSelected);\r\n\t\t\t\tthis.selectedPhotoIds = [];\r\n\t\t\t\tthis.selectionChanged(0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tprivate toggleSinglePhoto(shouldSelect: boolean, $item: JQuery) {\r\n\t\t\tconst { container: { allSelected }, item: { selected, notSelected } } = this.css;\r\n\t\t\t$item.toggleClass(selected, shouldSelect);\r\n\r\n\t\t\tif (this.$placeholder.hasClass(allSelected)) {\r\n\t\t\t\t$item.toggleClass(notSelected, !shouldSelect);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif (shouldSelect) {\r\n\t\t\t\tthis.selectedPhotoIds.push($item.attr(\"data-photo-id\")!);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t//remove the 'all-selected' class on container\r\n\t\t\t\tthis.$placeholder.removeClass(this.css.container.allSelected);\r\n\t\t\t\tthis.selectAll = false;\r\n\t\t\t\tthis.selectedPhotoIds = eXpress.utils.removeItem(this.selectedPhotoIds, (id) => id === $item.attr(\"data-photo-id\"));\r\n\t\t\t\tthis.currentSelectedPhotoIndex = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tconst { numberOfFilesSelected } = this.GetDeselected();\r\n\t\t\tthis.selectionChanged(numberOfFilesSelected);\r\n\t\t}\r\n\r\n\t\tpublic appendedToGrid(): void {\r\n\t\t\trowGrid(this.$placeholder[0], \"appended\");\r\n\t\t}\r\n\r\n\t\tpublic redrawGrid(itemSelector?: string): void {\r\n\t\t\tconst options = itemSelector ? { ...this.rowGridOptions, itemSelector } : this.rowGridOptions;\r\n\t\t\trowGrid(this.$placeholder[0], options);\r\n\t\t}\r\n\r\n\t\tpublic updatePhoto(photo: Photo) {\r\n\t\t\t// update data\r\n\t\t\tthis.photos[utils.findIndex(this.photos, (p: Photo) => p.code === photo.code)] = photo;\r\n\r\n\t\t\t// update image and grid\r\n\t\t\teXpress.html.loadImageAsync(photo.mediumUrl)\r\n\t\t\t\t.then(image => image && this.updatePhotoUpdateUi(photo, image), failedImage => this.updatePhotoUpdateUi(photo, failedImage));\r\n\t\t}\r\n\r\n\t\tprivate updatePhotoUpdateUi(photo: core.IPhoto, img: HTMLImageElement) {\r\n\t\t\t// set image in grid\r\n\t\t\tconst imageToUpdate = document.querySelector<HTMLDivElement>(`[data-photo-id=\"${photo.code}\"]`);\r\n\t\t\tif (imageToUpdate) {\r\n\t\t\t\tconst imgInDiv = imageToUpdate.getElementsByTagName('img')[0];\r\n\t\t\t\timgInDiv.src = img.src;\r\n\t\t\t\tthis.UpdateImageSize(photo, imgInDiv);\r\n\t\t\t}\r\n\r\n\t\t\t// render ui\r\n\t\t\tthis.renderPhoto(photo, img, true);\r\n\t\t\tthis.redrawGrid();\r\n\t\t}\r\n\r\n\t\tprivate UpdateImageSize(photo: eXpress.core.IPhoto, img: HTMLImageElement) {\r\n\t\t\tlet width;\r\n\t\t\tlet height;\r\n\r\n\t\t\t// remove attributes\r\n\t\t\timg.removeAttribute('width');\r\n\t\t\timg.removeAttribute('height');\r\n\r\n\t\t\tif (!photo.rotate90 || photo.rotate90 && (photo.rotate90 % 360 === 0 || photo.rotate90 % 360 === 180)) {\r\n\t\t\t\t// landscape\r\n\t\t\t\twidth = photo.width;\r\n\t\t\t\theight = photo.height;\r\n\t\t\t} else {\r\n\t\t\t\t// portrait\r\n\t\t\t\theight = photo.width;\r\n\t\t\t\twidth = photo.height;\r\n\t\t\t}\r\n\r\n\t\t\t// calucate ratio\r\n\t\t\tconst ratio = width / height;\r\n\t\t\tconst newWidth = ratio * this.minGridItemHeight;\r\n\r\n\t\t\t// add attributes\r\n\t\t\timg.setAttribute(\"height\", this.minGridItemHeight.toString());\r\n\t\t\timg.setAttribute(\"width\", newWidth.toString());\r\n\t\t}\r\n\r\n\t\tpublic removePhotos(ids: string[]) {\r\n\t\t\tif (!this.photos)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tthis.photos = this.photos.filter(p => p.fileId && ids.indexOf(p.fileId) < 0);\r\n\r\n\t\t\tids.forEach(id => {\r\n\t\t\t\tconst $photo = this.photoEls[id];\r\n\t\t\t\tif ($photo) $photo.remove(); // remove the photo from the DOM\r\n\t\t\t\tthis.photoEls[id] = undefined; // remove the entry from the domDictionary\r\n\t\t\t});\r\n\r\n\t\t\t// update folder if preview image is deleted\r\n\t\t\tconst isPreviewImageDeletedOfAlbum = this.photos.filter(x => x.mediumUrl === this.folder.mediumUrl).length <= 0 || this.photos.length <= 0;\r\n\t\t\tif (isPreviewImageDeletedOfAlbum)\r\n\t\t\t\tthis.updateFolderProperties();\r\n\r\n\t\t\tthis.selectedPhotoIds = this.selectedPhotoIds.filter(id => ids.indexOf(id) < 0);\r\n\t\t\tthis.filteredPhotoIds = this.getFilteredPhotos(this.photos).map(p => p.code);\r\n\r\n\t\t\tthis.folder.fileCount -= ids.length;\r\n\r\n\t\t\tthis.selectionChanged(0);\r\n\t\t\tthis.redrawGrid();\r\n\t\t}\r\n\r\n\t\tpublic removeAllPhotos() {\r\n\t\t\tif (!this.photos)\r\n\t\t\t\treturn;\r\n\r\n\t\t\tthis.folder.fileCount = 0;\r\n\r\n\t\t\tthis.selectionChanged(0);\r\n\t\t\tthis.clear();\r\n\t\t\tthis.updateFolderProperties();\r\n\t\t}\r\n\r\n\t\tprivate updateFolderProperties(): void {\r\n\t\t\t// set medium and thumb url for folder\r\n\t\t\tif (this.photos && this.photos.length > 0) {\r\n\t\t\t\t// for cover photo of the folder, take the first uploaded image\r\n\t\t\t\tconst sortedPhotos = this.photos.sort((p1, p2) => {\r\n\t\t\t\t\tif (p1.dateUploaded === p2.dateUploaded)\r\n\t\t\t\t\t\treturn 0;\r\n\r\n\t\t\t\t\t// make sure photos with undefined date uploaded are moved to the end\r\n\t\t\t\t\tif (!p1.dateUploaded || p1.dateUploaded > p2.dateUploaded!)\r\n\t\t\t\t\t\treturn 1; // p2 before p1\r\n\r\n\t\t\t\t\telse return -1; // p1 before p2\r\n\t\t\t\t});\r\n\t\t\t\tthis.folder.mediumUrl = sortedPhotos[0].mediumUrl;\r\n\t\t\t\tthis.folder.thumbUrl = sortedPhotos[0].thumbUrl;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.folder.mediumUrl = undefined;\r\n\t\t\t\tthis.folder.thumbUrl = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic close() {\r\n\t\t\tif (!this.folder.mediumUrl && this.photos.length > 0)\r\n\t\t\t\tthis.updateFolderProperties();\r\n\r\n\t\t\tthis.deinit();\r\n\t\t\tthis.clear();\r\n\r\n\t\t\tconst { isActive, allSelected } = this.css.container;\r\n\t\t\tthis.$placeholder.removeClass(`${isActive} ${allSelected}`);\r\n\r\n\t\t\tthis.$deferred.resolve();\r\n\t\t}\r\n\r\n\t\tpublic areAllPhotosLoaded(margin = 0): boolean {\r\n\t\t\treturn this.pageToken == '__NoMorePages__';\r\n\t\t}\r\n\t}\r\n}\r\n"],"names":["eXpress","core","SelectPhotos","$container","storageService","options","handlers","_this","this","css","item","selected","notSelected","imageError","container","allSelected","isActive","photoEls","closeHandler","blocker","$placeholder","hasClass","find","itemClass","itemNotSelectableClass","itemSelector","concat","page","pageSize","pageToken","rowGridOptions","resize","minMargin","maxMargin","firstItemClass","minGridItemHeight","selectedPhotoIds","selectAllWasActive","prototype","init","on","e","selectPhotoClickEvent","deletePhotoClickEvent","shiftSelect","photoClickEvent","scrollContainerHeight","scrollContainerEl","eventsDisposable","utils","compositeDisposable","html","addEventListener","window","setScrollContainerHeight","bind","bindScrollEvent","deinit","off","unbindScrollEvent","dispose","getPhotosAsync","combineResultWith","folder","sortOptions","sortBy","sortOrder","then","photosInFolder","lastItem","length","lastItemPageToken","newPhotosWithCombinedResults","__spreadArray","getFilteredPhotos","areAllPhotosLoaded","Error","formatString","id","code","toString","addPhotos","photos","filteredPhotoIds","map","p","renderPhoto","photo","img","update","undefined","$template","$","readOnly","remove","classes","className","push","selectAll","fileCount","selectionChanged","addClass","join","attr","$img","clone","append","UpdateImageSize","thumbRenderHook","photoNameFilter","photoIdFilter","toggleClass","$photo","replaceWith","insertBefore","loadNextPageAsync","Deferred","resolve","promise","nextPhotos","returnVal","forEach","image","Image","width","height","src","mediumUrl","allThumbsRenderedHook","openAsync","rowGridItemClass","onVisible","rowGrid","__assign","toggleAllPhotos","$deferred","showHideNoPhotosMessage","toggle","getSelectedPhotoIds","GetDeselected","deselected","numberOfFilesSelected","getSelectedPhotosAsync","result","useDeselected","partners","PartnerFolder","photoIds_1","filter","x","includes","each","index","el","_a","dataset","photoId","getPartnerPhotosAsync","context","pointOfSaleId","GetCookie","storeType","res","r","selectedFileIds","extraFilter","createAsync","clear","numberOfSelectedPhotos","removeClass","scrollTop","currentSelectedPhotoIndex","style","event","shiftKey","stopImmediatePropagation","$photoItems","targetIndex","currentTarget","allIds","toArray","getAttribute","indexOfBottomSelectedSequence","i","$unselected","slice","shiftUnselectedIds_1","firstSelectedIndexAboveTarget","$selected","shiftSelectedIds","updateSelectAllProperties","$item","$items","photoClicked","toggleSinglePhoto","isItemSelected","_b","parents","deleteClicked","scrollEventDisposable","scrollEvent","offsetHeight","scrollHeight","html_1","document","documentElement","containerHeight","body","documentHeight","Math","max","clientHeight","pageYOffset","margin","getBoundingClientRect","top","shouldLoadMore","showLoadingDialogAsync","appendedToGrid","shouldSelect","removeItem","redrawGrid","updatePhoto","findIndex","loadImageAsync","updatePhotoUpdateUi","failedImage","imageToUpdate","querySelector","imgInDiv","getElementsByTagName","removeAttribute","rotate90","newWidth","setAttribute","removePhotos","ids","fileId","indexOf","updateFolderProperties","removeAllPhotos","sortedPhotos","sort","p1","p2","dateUploaded","thumbUrl","close"],"mappings":"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"}