{"version":3,"file":"express.min.js","sources":["eXpress.ts"],"sourcesContent":["/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n// @ts-ignore\r\nconst historyJs: Historyjs = history;\r\n\r\ndeclare let pageContext: any;\r\ndeclare let isIE: boolean;\r\n\r\nwindow.onunload = function () {\r\n\t// keep this. We need this function to prevent firefox caching this page.\r\n};\r\nwindow.onbeforeunload = function () {\r\n\t// keep this. We need this function to prevent IE11+ caching this page.\r\n};\r\n\r\n//@ts-ignore\r\n$.ajaxPrefilter(function (opts, originalOpts: JQueryAjaxSettings & { retryCount?: number }, jqXHR) {\r\n\t//@ts-ignore\r\n\tif (opts.retryCount !== undefined && opts.retryCount === 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// our own deferred object to handle done/fail callbacks\r\n\tconst dfd = $.Deferred();\r\n\r\n\t// if the request works, return normally\r\n\tjqXHR.done(dfd.resolve);\r\n\r\n\t// if the request fails, do something else\r\n\t// yet still resolve\r\n\tjqXHR.fail(function (...args) {\r\n\t\tconst { retryCount = 2 } = originalOpts;\r\n\t\tconst canRetry = retryCount && (jqXHR.status === 0 || jqXHR.status === 404) && !jqXHR.getAllResponseHeaders(); // Mantis: 0028436 IE11: XMLHttpRequest: Network Error 0x2eff, Could not complete the operation due to error 00002eff\r\n\t\tif (canRetry) {\r\n\t\t\t// retry with a copied originalOpts with refreshRequest.\r\n\t\t\tconst newOpts = $.extend({}, originalOpts, {\r\n\t\t\t\tretryCount: retryCount - 1\r\n\t\t\t});\r\n\t\t\t// pass this one on to our deferred pass or fail.\r\n\t\t\t$.ajax(newOpts).then(dfd.resolve, dfd.reject);\r\n\r\n\t\t} else {\r\n\t\t\tdfd.rejectWith(jqXHR, args);\r\n\t\t}\r\n\t});\r\n\r\n\t// NOW override the jqXHR's promise functions with our deferred\r\n\treturn dfd.promise(jqXHR);\r\n});\r\n\r\n//fix for 0018855: neverending 'please wait' if you use browser back button from BE (saf-ipad only)\r\n//@ts-ignore\r\nif (history && history.pushState) {\r\n\t$(window).bind(\"popstate\", function () {\r\n\t\tif (typeof window.HideLoadingDialog !== \"undefined\") {\r\n\t\t\twindow.HideLoadingDialog();\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/* tslint:disable:interface-name */\r\ninterface JQuery {\r\n\tlazyload: (args: any) => any;\r\n\tJcrop: (args?: any) => any;\r\n}\r\n\r\ninterface Event {\r\n\ttouches: any;\r\n}\r\n\r\n/* tslint:disable:variable-name */\r\ninterface Window {\r\n\tCloseResponsiveDialog: (dialogId: string | undefined) => any;\r\n\tShowLoadingDialog: (timeout?: number) => any;\r\n\tHideLoadingDialog: () => any;\r\n\tShowActionDialog: (args: any) => any;\r\n\tPreventInvalidInput: (args: any, args1?: any, args2?: any) => any;\r\n\tShowContentDialog: (args: any) => any;\r\n\tCropper: () => any;\r\n\tdataLayerSite: any;\r\n\tdataLayer: any;\r\n\tinitSlider: any;\r\n\tCookiebot: any;\r\n\tpushDataLayer: (arg: object) => void;\r\n\tGetCookie: (args: any) => any;\r\n\tenableLeaveIntent: boolean;\r\n\tenableLeaveIntentConfigValue: boolean;\r\n\tDisableLeaveIntent(): void;\r\n\tEnableLeaveIntent(): void;\r\n\tLazyLoad: any;\r\n\tAdyenWeb: any;\r\n\tcontext: any;\r\n\tgtmData: string;\r\n}\r\n\r\nnamespace eXpress.core {\r\n\texport declare let context: IAppContext;\r\n\r\n\t// types\r\n\r\n\texport type PartnerType = \"express\" | \"facebook\" | \"googlephotos\" | \"instagram\";\r\n\r\n\texport const emptyGuid = '00000000-0000-0000-0000-000000000000';\r\n\r\n\t// enums\r\n\r\n\texport enum StoreType {\r\n\t\teXpress = 0,\r\n\t\tGooglePhotos = 2,\r\n\t\tFacebook = 3,\r\n\t\tInstagram = 4,\r\n\t\tSwissCom = 5,\r\n\t\tLocal = 10\r\n\t}\r\n\r\n\t// interfaces\r\n\r\n\texport interface IAppContext {\r\n\t\tapiHostUrl: string;\r\n\t\tpointOfSaleId: string;\r\n\t\tlanguageCode: string;\r\n\t\tcdn: string;\r\n\t\tcontentRevision: string;\r\n\t\tproductRevision: string;\r\n\t\taccountType: string;\r\n\t\tregionCode: string;\r\n\t\tregionTwoLetterCode: string;\r\n\t\tapplicationId: string;\r\n\t\tmobileTransitionScreenWidth: number;\r\n\t\tallowMobile: boolean;\r\n\t\tecomApiUrl: string;\r\n\t\tscope: string;\r\n\t}\r\n\r\n\texport interface IPhotoWithLoadedImage {\r\n\t\tphoto: T;\r\n\t\timage: HTMLImageElement;\r\n\t}\r\n\r\n\texport interface IGetDesignsResult {\r\n\t\tdesignCount: any;\r\n\t\tdesignFilterCount: any;\r\n\t\tdesigns: core.IDesign[];\r\n\t}\r\n\r\n\texport interface IDesign {\r\n\t\treadonly alternativeColors?: IAlternativeColor[];\r\n\t\treadonly color: string;\r\n\t\treadonly displayPrice: string;\r\n\t\treadonly displayPricePerUnit: string;\r\n\t\treadonly showStar: boolean;\r\n\t\treadonly dspName: string;\r\n\t\treadonly dspOverlayUrl: string;\r\n\t\treadonly new: boolean;\r\n\t\treadonly openDspOverlayUrl: string;\r\n\t\treadonly packshotUrl: string;\r\n\t\treadonly predefinedProductName: string;\r\n\t\treadonly product: IProduct;\r\n\t\treadonly productAlternativesGroups: IProductAlternativesGroup[];\r\n\t\treadonly productCategory: IProductCategory;\r\n\t\treadonly productCategoryCode: string;\r\n\t\treadonly productCategoryGroupCode: string;\r\n\t\treadonly productCategoryGroups: string[];\r\n\t\treadonly productCode: string;\r\n\t\treadonly pvc: string;\r\n\t\treadonly top: boolean;\r\n\t\treadonly temporaryUnavailable: boolean;\r\n\t\treadonly productVariantName: string;\r\n\t\treadonly dimensions: string;\r\n\t\treadonly canSwitchBackgroundInCreator: boolean;\r\n\t\treadonly hasSets: boolean;\r\n\t\treadonly supportsPersonalData: boolean;\r\n\t\treadonly debug: string;\r\n\t}\r\n\r\n\texport interface IConstellation {\r\n\t\tconstellationName: string;\r\n\t\tproductCode: string;\r\n\t\tproductName: string;\r\n\t\tshortName: string;\r\n\t}\r\n\r\n\texport interface IAlternativeColor {\r\n\t\tcolor: string;\r\n\t\tdesignVariant?: IDesignVariant;\r\n\t\tpredefinedProductName: string;\r\n\t\tproductCode: string;\r\n\t}\r\n\r\n\texport interface IDesignVariant {\r\n\t\tdesignVariantName: string;\r\n\t\ticon: string;\r\n\t\ticonColorCode: string;\r\n\t}\r\n\r\n\texport interface IProduct {\r\n\t\tname: string;\r\n\t\tshortName: string;\r\n\t\tdesignVariantInListDSP: services.InDsp;\r\n\t\tdesignVariantInOpenDSP: services.InDsp;\r\n\t}\r\n\r\n\texport interface IProductAlternativesGroup {\r\n\t\tinCreator: any;\r\n\t\tinListDSP: services.InDsp;\r\n\t\tinOpenDsp: services.InDsp;\r\n\t\tproductAlternatives: IProductAlternative[];\r\n\t\ttitle: string;\r\n\t}\r\n\r\n\texport interface IProductAlternative {\r\n\t\tdesignWillBeLost: boolean;\r\n\t\ticon: string;\r\n\t\ticonColorCode: string;\r\n\t\ticonOverlayColorCode: string;\r\n\t\torientation: services.Orientation;\r\n\t\tpredefinedProductName: string;\r\n\t\tproductCategoryCode: string;\r\n\t\tproductCode: string;\r\n\t\tproductVariantCode: string;\r\n\t\ttitle: string;\r\n\t}\r\n\r\n\texport interface IProductCategory {\r\n\t\tname: string;\r\n\t\tshortName: string;\r\n\t\tshowMeasurements: boolean;\r\n\t}\r\n\r\n\texport interface IDesignDetail {\r\n\t\tattributeDetails?: IDesignAttributeDetails;\r\n\t\tdisableOverlays: boolean;\r\n\t\teditorStartLink: string;\r\n\t\tproductDimensions: string;\r\n\t\tproductOptionGroups?: IDesignProductOptionGroup[];\r\n\t\tproductPreviewImageCount: number;\r\n\t\tproductPreviewImageUrls: string[];\r\n\t\tquantityBreakPriceDetails: IDesignQuantityBreakPriceDetails;\r\n\t\tshipmentDetails: { [key: string]: any };\r\n\t\tusps: string;\r\n\t\tvariablePriceDetails: any | null;\r\n\t\tpromotionDetails?: any;\r\n\t\toccasionPackShot: string;\r\n\t\tpurposePackShot: string;\r\n\t}\r\n\r\n\texport interface IDspMultiProductPageContext {\r\n\t\tpromoCode: string;\r\n\t\tlabelStartingPrice: string;\r\n\t\tlabelExpandableUpTo: string;\r\n\t\tlabelExtraPage: string;\r\n\t\tlabelYourChoice: string;\r\n\t\tlabelMeasurements: string;\r\n\t\tlabelStartingAt: string;\r\n\r\n\t\t// used by utils.displayPrice\r\n\t\tcurrencySymbol: string;\r\n\t\tdecimalSeparator: string;\r\n\t\tdisplayCurrencyLeft: string;\r\n\r\n\t\t// switches\r\n\t\tdisableFilterCounters?: boolean;\r\n\t\tenableOccasionFilter?: boolean;\r\n\t\tenablePurposeFilter?: boolean;\r\n\t\tenableOrientationFilter?: boolean;\r\n\t\tenablePredefinedProductCategoryFilter?: boolean;\r\n\t\tenableColorFilter?: boolean;\r\n\t\tenableNumberOfPhotosFilter?: boolean;\r\n\t\tenablePriceFilter?: boolean;\r\n\t\tenableGenderFilter?: boolean;\r\n\t\tamountOfDesignsToFetch?: number;\r\n\r\n\t\t/**\r\n\t\t * May not be set.\r\n\t\t * Only used if SOCIALIMAGE is used as placeholder in .social-template\r\n\t\t */\r\n\t\tcdn?: string;\r\n\t}\r\n\r\n\texport interface IDesignQuantityBreakPriceDetails {\r\n\t\tdefaultQuantityBreaks: number;\r\n\t\tquantityBreaks: IDesignQuantityBreak[];\r\n\t}\r\n\r\n\texport interface IDesignQuantityBreak {\r\n\t\tbreak: number;\r\n\t\tprice: number;\r\n\t}\r\n\r\n\texport interface IDesignProductOptionGroup {\r\n\t\tcode: string;\r\n\t\tname: string;\r\n\t\tinCreator: any;\r\n\t\tinDsp: any;\r\n\t\tinOptionPage: any;\r\n\t\tdescription: string;\r\n\t\tproductOptions: IDesignProductOption[] | null;\r\n\t\tsiblingDataOptionUSPs?: any;\r\n\t\tsiblingDataPageTitle?: string;\r\n\t\tspecification?: any;\r\n\t\ttitle: string;\r\n\t}\r\n\r\n\texport interface IDesignProductOption {\r\n\t\tcode: string;\r\n\t\topenDspOverlayUrl?: string;\r\n\t\tdspOverlayUrl?: string;\r\n\t\talternativeOptionGroup: string;\r\n\t\tname: string;\r\n\t\tprice: number;\r\n\t\tvarPrice: number;\r\n\t\tshortName: string;\r\n\t\tspecification?: any;\r\n\t\tvarAmount: number;\r\n\t\tdefaultProductOption: boolean;\r\n\t}\r\n\r\n\texport interface IDesignAttributeDetails {\r\n\t\tname: string;\r\n\t\tvalues?: IDesignAttributeDetailsValue[];\r\n\t}\r\n\r\n\texport interface IDesignAttributeDetailsValue {\r\n\t\tcode: string;\r\n\t\t// whether this option is the default\r\n\t\tdefault: boolean;\r\n\t\tname: string;\r\n\t\tquantityBreakPriceDetails: any | null;\r\n\t}\r\n\r\n\texport class LoginManager {\r\n\t\tprivate accountService: eXpress.services.AccountService;\r\n\r\n\t\tprivate timer: number;\r\n\t\tprivate startingAccId: string;\r\n\t\tprivate accountType: string;\r\n\r\n\t\tconstructor(accountService: eXpress.services.AccountService) {\r\n\t\t\tthis.accountService = accountService;\r\n\t\t\tthis.timer = -1;\r\n\t\t}\r\n\r\n\t\tpublic start(accountType: string): void {\r\n\t\t\tif (this.timer < 0) {\r\n\t\t\t\tthis.startingAccId = GetCookie(\"accid\");\r\n\t\t\t\tthis.accountType = accountType;\r\n\t\t\t\t// @ts-ignore\r\n\t\t\t\tthis.timer = setInterval(() => { this.run(); }, 1500);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic stop(): void {\r\n\t\t\tif (this.timer > 0)\r\n\t\t\t\tclearTimeout(this.timer);\r\n\t\t}\r\n\r\n\t\tprivate run(): void {\r\n\t\t\tconst currentAccountId = GetCookie(\"accid\");\r\n\t\t\tif (this.startingAccId !== currentAccountId) {\r\n\t\t\t\tif (!currentAccountId || currentAccountId === emptyGuid) {\r\n\t\t\t\t\t// User logged out in another tab\r\n\t\t\t\t\tthis.alertUser('LoginManager.LogoutInDifferentTab');\r\n\t\t\t\t\tclearTimeout(this.timer);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// User is logged in with a different account.\r\n\t\t\t\t\tif (this.accountType === 'full') {\r\n\t\t\t\t\t\t// We used to be a FULL, now a different account -> Impossible\r\n\t\t\t\t\t\tthis.alertUser('LoginManager.DifferentAccount');\r\n\r\n\t\t\t\t\t\tclearTimeout(this.timer);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t// TEMP got merged into FULL -> OK\r\n\t\t\t\t\t\t// Different FULL -> NOK\r\n\t\t\t\t\t\t// We need a webservice call for this ...\r\n\t\t\t\t\t\tthis.accountService.checkAccountValidityAsync(this.startingAccId, currentAccountId).then(res => {\r\n\t\t\t\t\t\t\tif (!res) {\r\n\t\t\t\t\t\t\t\tthis.alertUser('LoginManager.DifferentAccount');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tthis.startingAccId = currentAccountId;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\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\tprivate alertUser(key: string) {\r\n\t\t\tif ($(\"html\").hasClass(\"has-open-dialog\"))\r\n\t\t\t\twindow.CloseResponsiveDialog(undefined);\r\n\r\n\t\t\twindow.ShowContentDialog({\r\n\t\t\t\tlabel: key,\r\n\t\t\t\tokContentKey: 'Label.RefreshButtonText',\r\n\t\t\t\tcssClass: 'rspdialog',\r\n\t\t\t\tdialogId: 'loggedDifferentTab',\r\n\t\t\t\tokFunction: () => {\r\n\t\t\t\t\t$(window).unbind('beforeunload');\r\n\t\t\t\t\twindow.location.reload();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\texport interface Map {\r\n\t\t[K: string]: T;\r\n\t}\r\n\r\n\texport class KeyValuePair {\r\n\t\tpublic Key: string;\r\n\t\tpublic Value: T;\r\n\t}\r\n\r\n\texport class CustomHtmlElementsApp {\r\n\t\tprotected isInDiv = false;\r\n\t\tprotected controlHasFocus = false;\r\n\t\tprotected isMobile: boolean = (window.innerWidth <= 960 && window.innerHeight <= 960);\r\n\r\n\t\tprotected addHandlers(): void {\r\n\t\t\t$(window).resize(() => {\r\n\t\t\t\tthis.isMobile = (window.innerWidth <= 960 && window.innerHeight <= 960);\r\n\t\t\t});\r\n\r\n\t\t\t$(\".selectbox-choices\").on(\"mouseleave\", () => {\r\n\t\t\t\tif (this.controlHasFocus) {\r\n\t\t\t\t\tthis.isInDiv = true;\r\n\t\t\t\t\tthis.controlHasFocus = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$(\".slider input[type=text]\").on(\"mousedown\", () => {\r\n\t\t\t\tthis.controlHasFocus = true;\r\n\t\t\t});\r\n\r\n\t\t\t$(\".slider input[type=text]\").on(\"mouseup\", () => {\r\n\t\t\t\tthis.controlHasFocus = false;\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"click\", (e) => {\r\n\t\t\t\tif (!this.isInDiv) this.closeAllDropdowns();\r\n\r\n\t\t\t\tthis.isInDiv = false;\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"click\", \".multiselect .selectBox\", (e) => {\r\n\t\t\t\tthis.stopBubble(e, false);\r\n\t\t\t\tconst $target = $(e.currentTarget);\r\n\t\t\t\tif ($target.hasClass(\"open\")) {\r\n\t\t\t\t\tthis.closeAllDropdowns();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.closeAllDropdowns();\r\n\t\t\t\t\tconst $list = $target.closest('.multiselect').children('.checkboxes');\r\n\t\t\t\t\t$target.toggleClass(\"open\");\r\n\t\t\t\t\t$list.toggle();\r\n\t\t\t\t\t$('section.dsp').css(\"cursor\", \"pointer\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$(document).on(\"click\", \".filter-toggle\", (e) => {\r\n\t\t\t\t$(\".filter-toggle\").toggleClass(\"open\");\r\n\t\t\t\t$(\".filter-choice\").toggleClass(\"open\");\r\n\t\t\t\t$(\".filter-container\").toggleClass(\"open\");\r\n\r\n\t\t\t\tif ($(\".tag.filter-choice\").hasClass(\"open\")) {\r\n\t\t\t\t\t$('.main.small.filter-toggle').prop('disabled', true);\r\n\t\t\t\t\t$(\".button.own-designs\").hide();\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(\".button.own-designs\").show();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tpublic stopBubble(event: any, closeFilters: boolean): void {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tevent.stopPropagation();\r\n\t\t\tif (closeFilters)\r\n\t\t\t\tthis.closeAllDropdowns();\r\n\t\t}\r\n\r\n\t\tpublic closeAllDropdowns() {\r\n\t\t\t$(\".multiselect .selectBox\").removeClass('open');\r\n\t\t\t$(\".multiselect .checkboxes\").hide();\r\n\t\t\t$('section.dsp').css(\"cursor\", \"\");\r\n\t\t\t$(\".info-wrapper .bottom-center\").removeClass('open');\r\n\t\t\t$('.prints-amount .top-info-container').removeClass('open');\r\n\t\t}\r\n\t}\r\n\r\n\texport class DropdownElements extends CustomHtmlElementsApp {\r\n\t\tpublic start() {\r\n\t\t\tthis.addHandlers();\r\n\t\t}\r\n\t}\r\n\r\n\t// storage\r\n\r\n\t// start storage enums\r\n\r\n\texport enum SortOrder {\r\n\t\tAscending = 0,\r\n\t\tDescending = 1\r\n\t}\r\n\r\n\texport enum PhotoSortBy {\r\n\t\tDateTaken = 0,\r\n\t\tDateUploaded = 1,\r\n\t\tDateModified = 2,\r\n\t\tName = 3,\r\n\t\tOriginalFilename = 4\r\n\t}\r\n\r\n\t// end storage enums\r\n\r\n\t// start storage types\r\n\r\n\texport type StoreCode = \"eXpress\" | \"Facebook\" | \"GooglePhotos\" | \"Instagram\" | \"SwissCom\";\r\n\r\n\texport type AnyPhoto = Photo | partners.PartnerPhoto;\r\n\r\n\t// end storage types\r\n\r\n\t// start storage interfaces\r\n\texport interface IPhotoSortOptions {\r\n\t\tsortBy: PhotoSortBy;\r\n\t\tsortOrder: SortOrder;\r\n\t}\r\n\r\n\texport interface IPhotoOriginal {\r\n\t\treadonly id: string;\r\n\t\treadonly code: string;\r\n\t\treadonly accountId: string;\r\n\t\treadonly folderId: string;\r\n\t\treadonly name: string;\r\n\t\treadonly description: string;\r\n\t\treadonly originalFilename: string;\r\n\t\treadonly thumbUrl: string;\r\n\t\treadonly mediumUrl: string;\r\n\t\treadonly relativeMediumUrl: string;\r\n\t\treadonly width: number;\r\n\t\treadonly height: number;\r\n\t\treadonly rotate90: number;\r\n\t\treadonly fileSize: number;\r\n\t\treadonly dateTaken: Date;\r\n\t\treadonly dateUploaded: Date;\r\n\t\treadonly dateModified: Date;\r\n\t}\r\n\r\n\texport interface IPhoto {\r\n\t\treadonly code: string;\r\n\t\treadonly name: string;\r\n\t\treadonly description: string;\r\n\t\treadonly originalFilename: string;\r\n\t\treadonly thumbUrl: string;\r\n\t\treadonly mediumUrl: string;\r\n\t\treadonly width: number;\r\n\t\treadonly height: number;\r\n\t\treadonly fileSize: number;\r\n\t\treadonly dateTaken?: Date;\r\n\t\treadonly dateUploaded?: Date;\r\n\t\treadonly dateModified?: Date;\r\n\t\treadonly rotate90?: number;\r\n\t}\r\n\r\n\texport interface IPhotoStore {\r\n\t\treadonly name: string;\r\n\t\treadonly connectedUserName: string;\r\n\t\treadonly isConnected: boolean;\r\n\t\treadonly showAlbum: boolean;\r\n\t\treadonly showTokenExpiry: boolean;\r\n\t\treadonly hasAlbumAccess: boolean;\r\n\t\treadonly partnerLogoSvgUrl: string;\r\n\t\treadonly locatePhotosUrl: string;\r\n\t\treadonly importPhotosUrl: string;\r\n\t\treadonly useExternalPhotoPicker: boolean;\r\n\t\treadonly code: StoreCode;\r\n\t\treadonly storeType: StoreType;\r\n\t\tgetFoldersAsync: () => JQueryPromise;\r\n\t\tgetTokenExpiry: () => JQueryPromise;\r\n\t}\r\n\r\n\texport interface IPhotoFolder {\r\n\t\treadonly id?: string;\r\n\t\tfileCount: number;\r\n\t\tname: string;\r\n\t\tthumbUrl?: string;\r\n\t\tmediumUrl?: string;\r\n\t\treadonly dateCreated?: Date;\r\n\t\treadonly code?: string;\r\n\r\n\t\tgetPhotosAsync(page: number, pageSize: number, sortBy: PhotoSortBy, sortOrder: SortOrder, pageToken?: string): JQueryPromise;\r\n\t\tgetAllFileIdsAsync(): JQueryPromise;\r\n\t\tclone(): IPhotoFolder;\r\n\t}\r\n\r\n\texport interface ISmartphotoPhoto extends IPhoto {\r\n\t\treadonly fileId: string;\r\n\t\treadonly dateTaken: Date;\r\n\t\treadonly dateUploaded: Date;\r\n\t\treadonly dateModified: Date;\r\n\t\treadonly rotate90: number;\r\n\t\treadonly folderId: string;\r\n\t\treadonly hash: string;\r\n\t\trotate90Cw(): void;\r\n\t}\r\n\r\n\t// end storage interfaces\r\n\r\n\t// start storage classes\r\n\r\n\texport class Photo implements ISmartphotoPhoto {\r\n\t\tpublic readonly fileId: string;\r\n\t\tpublic readonly code: string;\r\n\t\tpublic readonly name: string;\r\n\t\tpublic readonly description: string;\r\n\t\tpublic readonly originalFilename: string;\r\n\t\tpublic readonly thumbUrl: string;\r\n\t\tpublic mediumUrl: string;\r\n\t\tpublic readonly width: number;\r\n\t\tpublic readonly height: number;\r\n\t\tpublic rotate90: number;\r\n\t\tpublic readonly fileSize: number;\r\n\t\tpublic readonly dateTaken: Date;\r\n\t\tpublic readonly dateUploaded: Date;\r\n\t\tpublic readonly dateModified: Date;\r\n\t\tpublic readonly folderId: string;\r\n\t\tpublic readonly hash: string;\r\n\r\n\t\tprivate relativeMediumUrl: string;\r\n\t\tprivate mediumUrlOriginal: string;\r\n\r\n\t\tconstructor(id: string, name: string, dateTaken: Date, dateModified: Date, dateUploaded: Date, description: string,\r\n\t\t\tfileSize: number, folderId: string | null, height: number, mediumUrl: string, originalFileName: string, thumbUrl: string,\r\n\t\t\twidth: number, rotate90: number, relativeMediumUrl: string, hash: string | null) {\r\n\t\t\tthis.fileId = id;\r\n\t\t\tthis.code = id;\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.dateTaken = dateTaken;\r\n\t\t\tthis.dateModified = dateModified;\r\n\t\t\tthis.dateUploaded = dateUploaded;\r\n\t\t\tthis.description = description;\r\n\t\t\tthis.width = width;\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.originalFilename = originalFileName;\r\n\t\t\tthis.thumbUrl = thumbUrl;\r\n\t\t\tthis.mediumUrl = mediumUrl;\r\n\t\t\tthis.rotate90 = rotate90;\r\n\t\t\tthis.relativeMediumUrl = relativeMediumUrl;\r\n\t\t\tthis.mediumUrlOriginal = mediumUrl;\r\n\t\t\tthis.fileSize = fileSize;\r\n\t\t\tthis.setMediumUrl();\r\n\t\t\tthis.folderId = folderId || \"\";\r\n\t\t\tthis.hash = hash || \"\";\r\n\t\t}\r\n\r\n\t\tpublic rotate90Cw() {\r\n\t\t\tthis.rotate90 = this.rotate90 + 90 % 360;\r\n\t\t\tthis.setMediumUrl();\r\n\t\t}\r\n\r\n\t\tprivate setMediumUrl() {\r\n\t\t\tthis.mediumUrl = this.rotate90 !== 0 ? this.relativeMediumUrl + \"&rot90=\" + this.rotate90 : this.mediumUrlOriginal;\r\n\t\t}\r\n\t}\r\n\r\n\texport abstract class BaseStore implements IPhotoStore {\r\n\t\tpublic name: string;\r\n\t\tpublic connectedUserName: string;\r\n\t\tpublic isConnected: boolean;\r\n\t\tpublic showAlbum: boolean;\r\n\t\tpublic showTokenExpiry: boolean;\r\n\t\tpublic hasAlbumAccess: boolean;\r\n\t\tpublic partnerLogoSvgUrl: string;\r\n\t\tpublic locatePhotosUrl: string;\r\n\t\tpublic importPhotosUrl: string;\r\n\t\tpublic useExternalPhotoPicker: boolean;\r\n\t\tpublic code: core.StoreCode;\r\n\t\tpublic storeType: StoreType;\r\n\t\tpublic page: number;\r\n\t\tpublic pageSize: number;\r\n\t\tpublic pageToken: string;\r\n\t\tpublic storageService: eXpress.services.StorageService;\r\n\r\n\t\tpublic constructor(\r\n\t\t\tname: string,\r\n\t\t\tusername: string,\r\n\t\t\tisConnected: boolean,\r\n\t\t\tstoreType: StoreType,\r\n\t\t\tstorageService: services.StorageService,\r\n\t\t\tshowAlbum: boolean,\r\n\t\t\tshowTokenExpiry: boolean,\r\n\t\t\thasAlbumAccess: boolean,\r\n\t\t\tpartnerLogoSvgUrl: string,\r\n\t\t\tlocatePhotosUrl: string,\r\n\t\t\timportPhotosUrl: string,\r\n\t\t\tuseExternalPhotoPicker: boolean) {\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.connectedUserName = username;\r\n\t\t\tthis.isConnected = isConnected;\r\n\t\t\tthis.storeType = storeType;\r\n\t\t\tthis.code = services.StoreType[this.storeType] as core.StoreCode;\r\n\t\t\tthis.storageService = storageService;\r\n\t\t\tthis.showAlbum = showAlbum;\r\n\t\t\tthis.showTokenExpiry = showTokenExpiry;\r\n\t\t\tthis.hasAlbumAccess = hasAlbumAccess;\r\n\t\t\tthis.partnerLogoSvgUrl = partnerLogoSvgUrl;\r\n\t\t\tthis.locatePhotosUrl = locatePhotosUrl;\r\n\t\t\tthis.importPhotosUrl = importPhotosUrl;\r\n\t\t\tthis.useExternalPhotoPicker = useExternalPhotoPicker;\r\n\t\t\tthis.page = 1;\r\n\t\t\tthis.pageSize = 999; // effectively disable paging\r\n\t\t\tthis.pageToken = '';\r\n\t\t}\r\n\r\n\t\tabstract getFoldersAsync(): JQueryPromise;\r\n\t\tabstract getTokenExpiry(): JQueryPromise;\r\n\t}\r\n\r\n\texport class ExpressStore extends BaseStore {\r\n\t\tconstructor(\r\n\t\t\tname: string,\r\n\t\t\tusername: string,\r\n\t\t\tisConnected: boolean,\r\n\t\t\tstorageService: services.StorageService,\r\n\t\t\tshowAlbum: boolean,\r\n\t\t\thasAlbumAccess: boolean,\r\n\t\t\tpartnerLogoSvgUrl: string,\r\n\t\t\tlocatePhotosUrl: string,\r\n\t\t\timportPhotosUrl: string,\r\n\t\t\tuseExternalPhotoPicker: boolean) {\r\n\t\t\tsuper(name, username, isConnected, StoreType.eXpress, storageService, showAlbum, false, hasAlbumAccess, partnerLogoSvgUrl, locatePhotosUrl, importPhotosUrl, useExternalPhotoPicker);\r\n\t\t}\r\n\r\n\t\tpublic connectToAsync(): JQueryPromise {\r\n\t\t\t// once we probably want to include login functionality here\r\n\t\t\t// for now we will always resolve with the current folder\r\n\t\t\treturn $.Deferred().resolve(true).promise();\r\n\t\t}\r\n\r\n\t\tpublic getFoldersAsync(): JQueryPromise {\r\n\t\t\treturn this.storageService.getFolderListWithThumbAsync(GetCookie(\"accid\"), context.pointOfSaleId, GetCookie(\"accid\"));\r\n\t\t}\r\n\r\n\t\tpublic getTokenExpiry(): JQueryPromise {\r\n\t\t\tthrow new Error(\"Not implemented\");\r\n\t\t}\r\n\t}\r\n\r\n\texport abstract class BaseFolder implements IPhotoFolder {\r\n\t\tpublic id: string;\r\n\t\tpublic fileCount: number;\r\n\t\tpublic name: string;\r\n\t\tpublic thumbUrl: string;\r\n\t\tpublic mediumUrl: string;\r\n\t\tpublic dateCreated: Date | undefined;\r\n\r\n\t\tprotected storageService: services.StorageService;\r\n\r\n\t\tconstructor(storageService: services.StorageService) {\r\n\t\t\tthis.storageService = storageService;\r\n\t\t}\r\n\r\n\t\tpublic clone(): SmartphotoFolder {\r\n\t\t\tconst clone = new SmartphotoFolder(this.storageService);\r\n\t\t\tclone.id = this.id;\r\n\t\t\tclone.fileCount = this.fileCount;\r\n\t\t\tclone.name = this.name;\r\n\t\t\tclone.thumbUrl = this.thumbUrl;\r\n\t\t\tclone.dateCreated = this.dateCreated;\r\n\t\t\tclone.mediumUrl = this.mediumUrl;\r\n\t\t\treturn clone;\r\n\t\t}\r\n\r\n\t\tabstract getPhotosAsync(page: number, pageSize: number, sortBy: PhotoSortBy, sortOrder: SortOrder, pageToken?: string): JQueryPromise;\r\n\t\tabstract getAllFileIdsAsync(): JQueryPromise;\r\n\t}\r\n\r\n\texport class SmartphotoFolder extends BaseFolder {\r\n\t\tpublic getPhotosAsync(page: number, pageSize: number, sortBy = PhotoSortBy.DateTaken, sortOrder = SortOrder.Ascending, pageToken?: string): JQueryPromise {\r\n\t\t\treturn this.storageService.getPhotosByFolderAsync(context.pointOfSaleId, GetCookie(\"accid\"), this.id, page, pageSize, sortBy, sortOrder, false);\r\n\t\t}\r\n\r\n\t\tpublic getPhotosByIdsAsync(folderId: string, ids: string[], useDeselected: boolean, isSelectAllActive: boolean): JQueryPromise {\r\n\t\t\treturn this.storageService.getPhotosAsync(context.pointOfSaleId, GetCookie(\"accid\"), folderId, ids, useDeselected, isSelectAllActive);\r\n\t\t}\r\n\r\n\t\tpublic getAllFileIdsAsync(): JQueryPromise {\r\n\t\t\treturn this.storageService.getFileIdsInFolderAsync(GetCookie(\"accid\"), this.id);\r\n\t\t}\r\n\t}\r\n\r\n\t// end storage classes\r\n\r\n\t// enums\r\n\r\n\texport enum Rotate90 {\r\n\t\tNone = 0,\r\n\t\tRight = 90,\r\n\t\tUpsideDown = 180,\r\n\t\tLeft = 270,\r\n\t}\r\n\r\n\t// start orderservice interfaces\r\n\texport enum UpdateShoppingCartAction {\r\n\t\tNone = 0,\r\n\t\tAdd,\r\n\t\tUpdate,\r\n\t\tRemove\r\n\t}\r\n\r\n\texport interface IOrderQuantiy {\r\n\t\tpvc: string;\r\n\t\tcrossSellFrom: string;\r\n\t\tquantity: number;\r\n\t}\r\n\r\n\texport interface IUpdateShoppingCartResult {\r\n\t\tredirectUrl: string;\r\n\t\ttotalPrice: number;\r\n\t\taction: UpdateShoppingCartAction;\r\n\t\tcartItemIds: string[];\r\n\t}\r\n\r\n\texport interface IUpdateCartItemQuantityResult {\r\n\t\tcartItem: ICartItem;\r\n\t\tsuccess: boolean;\r\n\t}\r\n\r\n\texport interface ICartItem {\r\n\t\tid: string;\r\n\t\tquantity: number;\r\n\t}\r\n\r\n\t// end orderservice interfaces\r\n\r\n\t// start mediastore\r\n\r\n\texport namespace mediastore {\r\n\t\texport class PhotoReference {\r\n\t\t\tpublic id: string;\r\n\t\t\tpublic manipulations: Manipulations;\r\n\t\t\tpublic photoId: string;\r\n\t\t}\r\n\r\n\t\texport class Manipulations {\r\n\t\t\tpublic colorEffect: string | null;\r\n\t\t\tpublic height: number;\r\n\t\t\tpublic left: number;\r\n\t\t\tpublic rotate90: number;\r\n\t\t\tpublic top: number;\r\n\t\t\tpublic width: number;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Get orientation after crop and rotation\r\n\t\t * @param item\r\n\t\t */\r\n\t\texport function itemGetOrientation(item: PhotoReference): string {\r\n\t\t\tlet width = item.manipulations.width;\r\n\t\t\tlet height = item.manipulations.height;\r\n\t\t\tif (item.manipulations.rotate90 === 90 || item.manipulations.rotate90 === 270) {\r\n\t\t\t\tconst temp = height;\r\n\t\t\t\theight = width;\r\n\t\t\t\twidth = temp;\r\n\t\t\t}\r\n\r\n\t\t\t// fall back original if no dimensions are found:\r\n\t\t\tif (height === 0 && width === 0) {\r\n\t\t\t\tif (item instanceof eXpress.core.bulkeditor.CartItem) {\r\n\t\t\t\t\tconst cartItem = item as eXpress.core.bulkeditor.CartItem;\r\n\t\t\t\t\twidth = cartItem.originalWidth;\r\n\t\t\t\t\theight = cartItem.originalHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\telse {\r\n\t\t\t\t\t// will default to square mode\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (height === width)\r\n\t\t\t\treturn 'square';\r\n\t\t\telse if (height > width)\r\n\t\t\t\treturn 'portrait';\r\n\t\t\telse\r\n\t\t\t\treturn 'landscape';\r\n\t\t}\r\n\t}\r\n\t// end mediastore\r\n}\r\n\r\nnamespace eXpress.platforms {\r\n\texport class BasePlatform implements IPlatform {\r\n\t\tpublic setTimeout(delayInMs: number, callback: (timer: IDisposable) => void): IDisposable {\r\n\t\t\tconst timer = {\r\n\t\t\t\tid: setTimeout(() => {\r\n\t\t\t\t\t// @ts-ignore\r\n\t\t\t\t\tdelete timer.id;\r\n\t\t\t\t\tcallback(timer);\r\n\t\t\t\t}, delayInMs),\r\n\t\t\t\tdispose: (): void => {\r\n\t\t\t\t\tif (timer.id) {\r\n\t\t\t\t\t\tclearTimeout(timer.id);\r\n\t\t\t\t\t\t// @ts-ignore\r\n\t\t\t\t\t\tdelete timer.id;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\treturn timer;\r\n\t\t}\r\n\r\n\t\t// Generate guid implementation\r\n\t\t// The Math.random has a lot of collisions, especially on chrome. Better to use the cryptography API. On chrome and so on this is windows.crypto.\r\n\t\t// On ie this is window.msCrypto. Fallback to the standard Math.Random version if neither exists\r\n\t\tpublic generateNewGuid(): string {\r\n\r\n\t\t\tlet buf: Uint16Array;\r\n\t\t\tlet S4: Function;\r\n\t\t\tconst crypto = (window as any).crypto;\r\n\t\t\tconst msCrypto = (window as any).msCrypto;\r\n\r\n\t\t\tif (typeof crypto !== \"undefined\" &&\r\n\t\t\t\ttypeof crypto.getRandomValues !== \"undefined\") {\r\n\t\t\t\t// If we have a cryptographically secure PRNG, use that\r\n\t\t\t\t// http://stackoverflow.com/questions/6906916/collisions-when-generating-uuids-in-javascript\r\n\t\t\t\tbuf = new Uint16Array(8);\r\n\t\t\t\tcrypto.getRandomValues(buf);\r\n\t\t\t\tS4 = function (num: number): string {\r\n\t\t\t\t\tlet ret = num.toString(16);\r\n\t\t\t\t\twhile (ret.length < 4) {\r\n\t\t\t\t\t\tret = \"0\" + ret;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn ret;\r\n\t\t\t\t};\r\n\t\t\t\treturn (S4(buf[0]) + S4(buf[1]) + \"-\" + S4(buf[2]) + \"-\" + S4(buf[3]) + \"-\" + S4(buf[4]) + \"-\" + S4(buf[5]) + S4(buf[6]) + S4(buf[7]));\r\n\t\t\t}\r\n\t\t\telse if (typeof msCrypto !== \"undefined\" &&\r\n\t\t\t\ttypeof msCrypto.getRandomValues !== \"undefined\") {\r\n\t\t\t\t// If we have a cryptographically secure PRNG, use that\r\n\t\t\t\t// http://stackoverflow.com/questions/6906916/collisions-when-generating-uuids-in-javascript\r\n\t\t\t\tbuf = new Uint16Array(8);\r\n\t\t\t\tmsCrypto.getRandomValues(buf);\r\n\t\t\t\tS4 = function (num: number): string {\r\n\t\t\t\t\tlet ret = num.toString(16);\r\n\t\t\t\t\twhile (ret.length < 4) {\r\n\t\t\t\t\t\tret = \"0\" + ret;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn ret;\r\n\t\t\t\t};\r\n\t\t\t\treturn (S4(buf[0]) + S4(buf[1]) + \"-\" + S4(buf[2]) + \"-\" + S4(buf[3]) + \"-\" + S4(buf[4]) + \"-\" + S4(buf[5]) + S4(buf[6]) + S4(buf[7]));\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Otherwise, just use Math.random\r\n\t\t\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\r\n\t\t\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c): string {\r\n\t\t\t\t\t/* tslint:disable:no-bitwise triple-equals */\r\n\t\t\t\t\tconst r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n\t\t\t\t\t/* tslint:enable:no-bitwise triple-equals */\r\n\t\t\t\t\treturn v.toString(16);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nnamespace eXpress {\r\n\texport const base: IPlatform = new platforms.BasePlatform();\r\n}\r\n\r\n\r\nnamespace eXpress.core.partners {\r\n\tinterface IPartnerPhoto extends IPhoto {\r\n\t\treadonly hiresUrl: string;\r\n\t\treadonly downloadUrl: string;\r\n\t\treadonly storeType: StoreType;\r\n\t}\r\n\r\n\t// classes\r\n\r\n\texport class PartnerStore extends BaseStore {\r\n\r\n\t\tconstructor(\r\n\t\t\tname: string,\r\n\t\t\tusername: string,\r\n\t\t\tisConnected: boolean,\r\n\t\t\tstoreType: StoreType,\r\n\t\t\tstorageService: services.StorageService,\r\n\t\t\tshowAlbum: boolean,\r\n\t\t\tshowTokenExpiry: boolean,\r\n\t\t\thasAlbumAccess: boolean,\r\n\t\t\tpartnerLogoSvgUrl: string,\r\n\t\t\tlocatePhotosUrl: string,\r\n\t\t\timportPhotosUrl: string,\r\n\t\t\tuseExternalPhotoPicker: boolean) {\r\n\t\t\tsuper(name, username, isConnected, storeType, storageService, showAlbum, showTokenExpiry, hasAlbumAccess, partnerLogoSvgUrl, locatePhotosUrl, importPhotosUrl, useExternalPhotoPicker);\r\n\t\t}\r\n\r\n\t\tpublic getFoldersAsync(): JQueryPromise {\t\t\t\r\n\t\t\treturn this.storageService.getPartnerAlbumsAsync(this.code, GetCookie(\"accid\"), context.pointOfSaleId, this.page, this.pageSize, this.pageToken);\r\n\t\t}\r\n\r\n\t\tpublic getTokenExpiry(): JQueryPromise {\r\n\t\t\treturn this.storageService.getTokenExpiry(this.code, GetCookie(\"accid\"), context.pointOfSaleId);\r\n\t\t}\r\n\t}\r\n\r\n\texport class PartnerFolder extends BaseFolder {\r\n\t\tpublic readonly storeType: StoreType;\r\n\t\tpublic pageToken: string;\r\n\t\tprivate photos: core.partners.PartnerPhoto[];\r\n\r\n\t\tconstructor(storeType: StoreType, storageService: services.StorageService) {\r\n\t\t\tsuper(storageService);\r\n\t\t\tthis.storeType = storeType;\r\n\t\t}\r\n\r\n\t\tpublic getPhotosAsync(page: number, pageSize: number, sortBy: PhotoSortBy, sortOrder: SortOrder, pageToken?: string): JQueryPromise {\r\n\t\t\treturn this.storageService.getPartnerPhotosInFolderAsync(this.id, this.storeType, GetCookie(\"accid\"), context.pointOfSaleId, page, pageSize, pageToken)\r\n\t\t\t\t.then(photos => {\r\n\t\t\t\t\tif (!photos)\r\n\t\t\t\t\t\tthrow new Error(`PartnerFolder.getPhotosAsync returned undefined for partner: ${StoreType[this.storeType]}`);\r\n\r\n\t\t\t\t\tthis.photos = photos;\r\n\t\t\t\t\treturn this.photos;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tpublic getAllFileIdsAsync(): JQueryPromise {\r\n\t\t\treturn $.Deferred().resolve(this.photos.map(photo => photo.code)).promise();\r\n\t\t}\r\n\t}\r\n\r\n\texport class PartnerPhoto implements IPartnerPhoto {\r\n\t\tpublic fileId?: string;\r\n\t\tpublic readonly code: string;\r\n\t\tpublic readonly name: string;\r\n\t\tpublic readonly description: string;\r\n\t\tpublic readonly originalFilename: string;\r\n\t\tpublic readonly thumbUrl: string;\r\n\t\tpublic readonly mediumUrl: string;\r\n\t\tpublic readonly width: number;\r\n\t\tpublic readonly height: number;\r\n\t\tpublic readonly fileSize: number;\r\n\t\tpublic readonly dateTaken: Date;\r\n\t\tpublic readonly dateUploaded: Date;\r\n\t\tpublic readonly dateModified: Date;\r\n\t\tpublic readonly hiresUrl: string;\r\n\t\tpublic readonly downloadUrl: string;\r\n\t\tpublic readonly storeType: services.StoreType;\r\n\t\tpublic readonly pageToken: string;\r\n\r\n\t\tconstructor(id: string, name: string, dateTaken: Date, dateModified: Date, dateUploaded: Date, description: string,\r\n\t\t\tfileSize: number, folderId: string, height: number, mediumUrl: string, originalFileName: string, thumbUrl: string,\r\n\t\t\twidth: number, hiresUrl: string, downloadUrl: string, storeType: StoreType, code: string, pageToken: string) {\r\n\t\t\tthis.fileId = id;\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.dateTaken = dateTaken;\r\n\t\t\tthis.dateModified = dateModified;\r\n\t\t\tthis.dateUploaded = dateUploaded;\r\n\t\t\tthis.description = description;\r\n\t\t\tthis.width = width;\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.originalFilename = originalFileName;\r\n\t\t\tthis.thumbUrl = thumbUrl;\r\n\t\t\tthis.mediumUrl = mediumUrl;\r\n\t\t\tthis.storeType = storeType;\r\n\t\t\tthis.hiresUrl = hiresUrl;\r\n\t\t\tthis.downloadUrl = downloadUrl;\r\n\t\t\tthis.code = code;\r\n\t\t\tthis.pageToken = pageToken;\r\n\t\t}\r\n\t}\r\n\r\n\t// end classes\r\n}\r\n\r\nnamespace eXpress.serialization {\r\n\r\n\texport function convertPhotoIdToStorageIdWithoutAccountId(photoStorageIds: string[]): eXpress.services.IStorageId[] {\r\n\t\treturn photoStorageIds.map(photoId => ({\r\n\t\t\tId: photoId\r\n\t\t}));\r\n\t}\r\n\r\n\texport function convertPhotoIdToStorageId(photoStorageIds: string[], accountId: string): eXpress.services.IStorageId[] {\r\n\t\treturn photoStorageIds.map(photoId => ({\r\n\t\t\tId: photoId,\r\n\t\t\tAccountId: accountId\r\n\t\t}));\r\n\t}\r\n\r\n\texport function convertStoreCodeToStoreType(code: eXpress.core.StoreCode): eXpress.services.StoreType {\r\n\t\treturn eXpress.services.StoreType[code];\r\n\t}\r\n\r\n\t// OrderService serialisation\r\n\r\n\texport function OrderQuantityConvert(quantity: eXpress.core.IOrderQuantiy): eXpress.services.IOrderQuantiy {\r\n\t\treturn {\r\n\t\t\tQuantity: quantity.quantity,\r\n\t\t\tCrossSellFrom: quantity.crossSellFrom,\r\n\t\t\tPvc: quantity.pvc\r\n\t\t};\r\n\t}\r\n\r\n\texport function cartItemConvert(item: eXpress.core.bulkeditor.CartItem): eXpress.services.bulkeditor.ICartItem {\r\n\t\treturn {\r\n\t\t\tApplyAllFailed: item.applyAllFailed,\r\n\t\t\tCreatedForced: item.createdForced ? eXpress.utils.formatWcfJsonDate(item.createdForced) : null,\r\n\t\t\tDateModifiedParent: item.dateModifiedParent ? eXpress.utils.formatWcfJsonDate(item.dateModifiedParent) : null,\r\n\t\t\tDatePictureTaken: item.datePictureTaken ? eXpress.utils.formatWcfJsonDate(item.datePictureTaken) : null,\r\n\t\t\tFileSize: item.fileSize,\r\n\t\t\tId: item.id,\r\n\t\t\tManipulations: manipulationsConvert(item.manipulations),\r\n\t\t\tOldFileSystem: item.oldFileSystem,\r\n\t\t\tOriginalFileName: item.originalFileName,\r\n\t\t\tOriginalHeight: item.originalHeight,\r\n\t\t\tOriginalWidth: item.originalWidth,\r\n\t\t\tPhotoCounter: item.photoCounter,\r\n\t\t\tPhotoId: item.photoId,\r\n\t\t\tProducts: item.products.map(p => cartItemProductConvert(p)),\r\n\t\t\tThumbUrl: \"\",\r\n\t\t\tMediumUrl: \"\"\r\n\t\t};\r\n\t}\r\n\r\n\texport function simpleCartItemConvert(item: eXpress.core.bulkeditor.CartItem): eXpress.services.bulkeditor.ISimpleCartItem {\r\n\t\treturn {\r\n\t\t\tProducts: item.products.map(p => cartItemProductConvert(p))\r\n\t\t};\r\n\t}\r\n\r\n\texport function manipulationsConvert(manipulations: eXpress.core.mediastore.Manipulations): eXpress.services.bulkeditor.IManipulations {\r\n\t\treturn {\r\n\t\t\tColorEffect: manipulations.colorEffect,\r\n\t\t\tHeight: manipulations.height,\r\n\t\t\tLeft: manipulations.left,\r\n\t\t\tRotate90: manipulations.rotate90,\r\n\t\t\tTop: manipulations.top,\r\n\t\t\tWidth: manipulations.width\r\n\t\t};\r\n\t}\r\n\r\n\texport function cartItemProductConvert(apiObject: eXpress.core.bulkeditor.CartItemProduct): eXpress.services.bulkeditor.ICartItemProduct {\r\n\t\treturn {\r\n\t\t\tBorder: apiObject.border,\r\n\t\t\tColorEffect: apiObject.colorEffect,\r\n\t\t\tPaper: apiObject.paper,\r\n\t\t\tProductCode: apiObject.productCode,\r\n\t\t\tQuantity: apiObject.quantity,\r\n\t\t\tCartItemId: apiObject.cartItemId\r\n\t\t};\r\n\t}\r\n\r\n\texport function productConvert(apiObject: eXpress.services.bulkeditor.IProduct): eXpress.core.bulkeditor.Product {\r\n\t\treturn {\r\n\t\t\tattributes: apiObject.Attributes,\r\n\t\t\tattributesDict: apiObject.AttributesDict,\r\n\t\t\tcode: apiObject.Code,\r\n\t\t\toptions: apiObject.Options,\r\n\t\t\toptionsDict: apiObject.OptionsDict\r\n\t\t};\r\n\t}\r\n}\r\n\r\nnamespace eXpress.deserialization {\r\n\r\n\t/* Design && DesignDetail */\r\n\r\n\texport function getDesignsResultConvert(obj: eXpress.services.IGetDesignsResult): eXpress.core.IGetDesignsResult {\r\n\t\treturn {\r\n\t\t\tdesignCount: obj.DesignCount,\r\n\t\t\tdesignFilterCount: obj.DesignFilterCount,\r\n\t\t\tdesigns: obj.Designs.map(d => designConvert(d))\r\n\t\t};\r\n\t}\r\n\r\n\texport function designConstellationConvert(obj: services.IConstellation): core.IConstellation {\r\n\t\treturn {\r\n\t\t\tconstellationName: obj.ConstellationName,\r\n\t\t\tproductCode: obj.ProductCode,\r\n\t\t\tproductName: obj.ProductName,\r\n\t\t\tshortName: obj.ShortName\r\n\t\t};\r\n\t}\r\n\r\n\texport function designAlternativeColorConvert(obj: services.IAlternativeColor): core.IAlternativeColor {\r\n\t\treturn {\r\n\t\t\tcolor: obj.Color,\r\n\t\t\tdesignVariant: obj!.DesignVariant ? designVariantConvert(obj.DesignVariant) : undefined,\r\n\t\t\tpredefinedProductName: obj.PredefinedProductName,\r\n\t\t\tproductCode: obj.ProductCode\r\n\t\t};\r\n\t}\r\n\r\n\texport function designVariantConvert(obj: services.IDesignVariant): core.IDesignVariant {\r\n\t\treturn {\r\n\t\t\tdesignVariantName: obj.DesignVariantName,\r\n\t\t\ticon: obj.Icon,\r\n\t\t\ticonColorCode: obj.IconColorCode\r\n\t\t};\r\n\t}\r\n\r\n\texport function designProductConvert(obj: services.IProduct): core.IProduct {\r\n\t\treturn {\r\n\t\t\tname: obj.Name,\r\n\t\t\tshortName: obj.ShortName,\r\n\t\t\tdesignVariantInListDSP: obj.DesignVariantInListDSP as services.InDsp,\r\n\t\t\tdesignVariantInOpenDSP: obj.DesignVariantInOpenDSP as eXpress.services.InDsp\r\n\t\t};\r\n\t}\r\n\r\n\texport function designProductAlternativesGroupConvert(obj: eXpress.services.IProductAlternativesGroup): eXpress.core.IProductAlternativesGroup {\r\n\t\treturn {\r\n\t\t\tinCreator: obj.InCreator,\r\n\t\t\tinListDSP: obj.InListDSP as services.InDsp,\r\n\t\t\tinOpenDsp: obj.InOpenDSP as services.InDsp,\r\n\t\t\tproductAlternatives: obj.ProductAlternatives.map(pa => designProductAlternativeConvert(pa)),\r\n\t\t\ttitle: obj.Title\r\n\t\t};\r\n\t}\r\n\r\n\texport function designProductCategoryConvert(obj: services.IProductCategory): core.IProductCategory {\r\n\t\treturn {\r\n\t\t\tname: obj.Name,\r\n\t\t\tshortName: obj.ShortName,\r\n\t\t\tshowMeasurements: obj.ShowMeasurements\r\n\t\t};\r\n\t}\r\n\r\n\texport function designProductAlternativeConvert(obj: services.IProductAlternative): core.IProductAlternative {\r\n\t\treturn {\r\n\t\t\tdesignWillBeLost: obj.DesignWillBeLost,\r\n\t\t\ticon: obj.Icon,\r\n\t\t\ticonColorCode: obj.IconColorCode,\r\n\t\t\ticonOverlayColorCode: obj.IconOverlayColorCode,\r\n\t\t\torientation: services.Orientation[obj.Orientation],\r\n\t\t\tpredefinedProductName: obj.PredefinedProductName,\r\n\t\t\tproductCategoryCode: obj.ProductCategoryCode,\r\n\t\t\tproductCode: obj.ProductCode,\r\n\t\t\tproductVariantCode: obj.ProductVariantCode,\r\n\t\t\ttitle: obj.Title\r\n\t\t};\r\n\t}\r\n\r\n\texport function designAttributeDetailsValueConvert(obj: services.IDesignAttributeDetailsValue): core.IDesignAttributeDetailsValue {\r\n\t\treturn {\r\n\t\t\tcode: obj.Code,\r\n\t\t\tdefault: obj.Default,\r\n\t\t\tname: obj.Name,\r\n\t\t\tquantityBreakPriceDetails: obj.QuantityBreakPriceDetails\r\n\t\t};\r\n\t}\r\n\r\n\texport function designAttributeDetailsConvert(obj: services.IDesignAttributeDetails): core.IDesignAttributeDetails {\r\n\t\treturn {\r\n\t\t\tname: obj.Name,\r\n\t\t\tvalues: obj.Values ? obj.Values.map(v => designAttributeDetailsValueConvert(v)) : undefined\r\n\t\t};\r\n\t}\r\n\r\n\texport function designQuantityBreakPriceDetailsConvert(obj: services.IDesignQuantityBreakPriceDetails): core.IDesignQuantityBreakPriceDetails {\r\n\t\treturn {\r\n\t\t\tdefaultQuantityBreaks: obj.DefaultQuantityBreaks,\r\n\t\t\tquantityBreaks: obj.QuantityBreaks.map(qb => designQuantityBreakConvert(qb))\r\n\t\t};\r\n\t}\r\n\r\n\texport function designQuantityBreakConvert(obj: services.IDesignQuantityBreak): core.IDesignQuantityBreak {\r\n\t\treturn {\r\n\t\t\tbreak: obj.Break,\r\n\t\t\tprice: obj.Price\r\n\t\t};\r\n\t}\r\n\r\n\texport function designProductOptionGroupConvert(obj: services.IDesignProductOptionGroup): core.IDesignProductOptionGroup {\r\n\t\treturn {\r\n\t\t\tname: obj.Name,\r\n\t\t\tcode: obj.Code,\r\n\t\t\tinDsp: obj.InDsp,\r\n\t\t\tinCreator: obj.InDsp,\r\n\t\t\tinOptionPage: obj.InOptionPage,\r\n\t\t\tdescription: obj.Description,\r\n\t\t\tproductOptions: obj!.ProductOptions ? obj.ProductOptions.map(po => designProductOptionConvert(po)) : null,\r\n\t\t\tsiblingDataOptionUSPs: obj.SiblingDataOptionUSPs,\r\n\t\t\tsiblingDataPageTitle: obj.SiblingDataPageTitle,\r\n\t\t\tspecification: obj.Specification,\r\n\t\t\ttitle: obj.Title\r\n\t\t};\r\n\t}\r\n\r\n\texport function designProductOptionConvert(obj: services.IDesignProductOption): core.IDesignProductOption {\r\n\t\treturn {\r\n\t\t\tcode: obj.Code,\r\n\t\t\talternativeOptionGroup: obj.AlternativeOptionGroup,\r\n\t\t\tname: obj.Name,\r\n\t\t\tprice: obj.Price,\r\n\t\t\tvarPrice: obj.VarPrice,\r\n\t\t\tdspOverlayUrl: obj.DspOverlayUrl,\r\n\t\t\topenDspOverlayUrl: obj.OpenDspOverlayUrl,\r\n\t\t\tdefaultProductOption: obj.DefaultProductOption,\r\n\t\t\tshortName: obj.ShortName,\r\n\t\t\tspecification: obj.Specification,\r\n\t\t\tvarAmount: obj.VarAmount\r\n\t\t};\r\n\t}\r\n\r\n\texport function designDetailConvert(obj: services.IDesignDetail): core.IDesignDetail {\r\n\t\treturn {\r\n\t\t\tattributeDetails: obj!.AttributeDetails ? designAttributeDetailsConvert(obj.AttributeDetails) : undefined,\r\n\t\t\tdisableOverlays: obj.DisableOverlays,\r\n\t\t\teditorStartLink: obj.EditorStartLink,\r\n\t\t\tproductOptionGroups: obj!.ProductOptionGroups ? obj.ProductOptionGroups.map(pog => designProductOptionGroupConvert(pog)) : undefined,\r\n\t\t\tproductPreviewImageCount: obj.ProductPreviewImageCount,\r\n\t\t\tproductPreviewImageUrls: obj.ProductPreviewImageUrls,\r\n\t\t\tquantityBreakPriceDetails: designQuantityBreakPriceDetailsConvert(obj.QuantityBreakPriceDetails),\r\n\t\t\tshipmentDetails: obj.ShipmentDetails,\r\n\t\t\tusps: obj.USPs,\r\n\t\t\tvariablePriceDetails: obj.VariablePriceDetails,\r\n\t\t\tpromotionDetails: obj.PromotionDetails,\r\n\t\t\toccasionPackShot: obj.OccasionPackShot,\r\n\t\t\tpurposePackShot: obj.PurposePackShot,\r\n\t\t\tproductDimensions: obj.ProductDimensions\r\n\t\t};\r\n\t}\r\n\r\n\texport function designConvert(obj: services.IDesign): core.IDesign {\r\n\t\treturn {\r\n\t\t\talternativeColors: obj.AlternativeColors && obj.AlternativeColors.length > 0 ? obj.AlternativeColors.map(ac => designAlternativeColorConvert(ac)) : undefined,\r\n\t\t\tcolor: obj.Color,\r\n\t\t\tdisplayPrice: obj.DisplayPrice,\r\n\t\t\tdisplayPricePerUnit: obj.DisplayPricePerUnit,\r\n\t\t\tshowStar: obj.ShowStar,\r\n\t\t\tdspName: obj.DspName,\r\n\t\t\tdspOverlayUrl: obj.DspOverlayUrl,\r\n\t\t\tnew: obj.New,\r\n\t\t\topenDspOverlayUrl: obj.OpenDspOverlayUrl,\r\n\t\t\tpackshotUrl: obj.PackshotUrl,\r\n\t\t\tpredefinedProductName: obj.PredefinedProductName,\r\n\t\t\tproduct: designProductConvert(obj.Product),\r\n\t\t\tproductAlternativesGroups: obj!.ProductAlternativesGroups ? obj.ProductAlternativesGroups.map(pag => designProductAlternativesGroupConvert(pag)) : [],\r\n\t\t\tproductCategory: designProductCategoryConvert(obj.ProductCategory),\r\n\t\t\tproductCategoryCode: obj.ProductCategoryCode,\r\n\t\t\tproductCategoryGroupCode: obj.ProductCategoryGroupCode,\r\n\t\t\tproductCategoryGroups: obj.ProductCategoryGroups,\r\n\t\t\tproductCode: obj.ProductCode,\r\n\t\t\tpvc: obj.Pvc,\r\n\t\t\ttop: obj.Top,\r\n\t\t\ttemporaryUnavailable: obj.TemporaryUnavailable,\r\n\t\t\tproductVariantName: obj.ProductVariantName,\r\n\t\t\tdimensions: obj.Dimensions,\r\n\t\t\tcanSwitchBackgroundInCreator: obj.CanSwitchBackgroundInCreator,\r\n\t\t\thasSets: obj.HasSets,\r\n\t\t\tsupportsPersonalData: obj.SupportsPersonalData,\r\n\t\t\tdebug: obj.Debug\r\n\t\t};\r\n\t}\r\n\r\n\t/* End Design && DesignDetail */\r\n\r\n\r\n\texport function photoFolderConvert(folder: eXpress.services.IPhotoFolder, storageService: services.StorageService): core.SmartphotoFolder {\r\n\t\t// validate\r\n\t\tif (!folder.Id)\r\n\t\t\tthrow new Error(\"Can't deserialize a folder without id.\");\r\n\r\n\t\tconst angle = ((folder.ThumbUrlRotation90 || 0) + 360) % 360;\r\n\t\tconst angleRotate90: eXpress.core.Rotate90 = angle;\r\n\t\tconst coreFolder = new core.SmartphotoFolder(storageService);\r\n\t\tcoreFolder.id = folder.Id;\r\n\t\tcoreFolder.name = folder.Name;\r\n\t\tcoreFolder.fileCount = folder.FileCount;\r\n\t\tcoreFolder.thumbUrl = angle ? (folder.ThumbUrl + \"&rot90=\" + angleRotate90) : folder.ThumbUrl;\r\n\t\tcoreFolder.mediumUrl = angle ? (folder.MediumUrl + \"&rot90=\" + angleRotate90) : folder.MediumUrl;\r\n\t\tcoreFolder.dateCreated = deserialiseDate(folder.DateCreated) || undefined;\r\n\t\treturn coreFolder;\r\n\t}\r\n\r\n\texport function partnerFolderConvert(folder: eXpress.services.IPhotoFolder, storeType: services.StoreType, pageToken: string, storageService: services.StorageService) {\r\n\t\tif (!folder.Code) throw new Error(\"Can't deserialze partnerfolder with folder code\");\r\n\t\tconst coreFolder = new core.partners.PartnerFolder(storeType, storageService);\r\n\t\tcoreFolder.id = folder.Code;\r\n\t\tcoreFolder.name = folder.Name || \"\";\r\n\t\tcoreFolder.fileCount = folder.FileCount;\r\n\t\tcoreFolder.thumbUrl = folder.ThumbUrl;\r\n\t\tcoreFolder.mediumUrl = folder.MediumUrl;\r\n\t\tcoreFolder.dateCreated = deserialiseDate(folder.DateCreated) || undefined;\r\n\t\tcoreFolder.pageToken = pageToken;\r\n\t\treturn coreFolder;\r\n\t}\r\n\r\n\texport function photoConvert(apiObject: eXpress.services.IPhoto): core.Photo {\r\n\t\treturn new core.Photo(apiObject.Id,\r\n\t\t\tapiObject.Name,\r\n\t\t\tdeserialiseDate(apiObject.DateTaken),\r\n\t\t\tdeserialiseDate(apiObject.DateModified),\r\n\t\t\tdeserialiseDate(apiObject.DateUploaded),\r\n\t\t\tapiObject.Description,\r\n\t\t\tapiObject.FileSize,\r\n\t\t\tapiObject.FolderId,\r\n\t\t\tapiObject.Height,\r\n\t\t\tapiObject.MediumUrl,\r\n\t\t\tapiObject.OriginalFilename,\r\n\t\t\tapiObject.ThumbUrl,\r\n\t\t\tapiObject.Width,\r\n\t\t\tapiObject.Rotate90 || 0,\r\n\t\t\tapiObject.RelativeMediumUrl,\r\n\t\t\tapiObject.Hash);\r\n\t}\r\n\r\n\texport function partnerPhotoConvert(apiObject: eXpress.services.IPhoto, storeType: eXpress.services.StoreType, pageToken: string): eXpress.core.partners.PartnerPhoto {\r\n\t\treturn new core.partners.PartnerPhoto(apiObject.Id,\r\n\t\t\tapiObject.Name,\r\n\t\t\tdeserialiseDate(apiObject.DateTaken),\r\n\t\t\tdeserialiseDate(apiObject.DateModified),\r\n\t\t\tdeserialiseDate(apiObject.DateUploaded),\r\n\t\t\tapiObject.Description,\r\n\t\t\tapiObject.FileSize,\r\n\t\t\tapiObject.FolderId,\r\n\t\t\tapiObject.Height,\r\n\t\t\tapiObject.MediumUrl,\r\n\t\t\tapiObject.OriginalFilename,\r\n\t\t\tapiObject.ThumbUrl,\r\n\t\t\tapiObject.Width,\r\n\t\t\tapiObject.HiresUrl,\r\n\t\t\tapiObject.DownloadUrl,\r\n\t\t\tstoreType,\r\n\t\t\tapiObject.Code,\r\n\t\t\tpageToken);\r\n\t}\r\n\r\n\texport function photoStoreConvert(apiObject: eXpress.services.IPhotoStore, storageService: eXpress.services.StorageService): eXpress.core.IPhotoStore {\r\n\t\t// return express store\r\n\t\tif (apiObject.StoreType === services.StoreType.eXpress)\r\n\t\t\treturn new core.ExpressStore(\r\n\t\t\t\tapiObject.Name,\r\n\t\t\t\tapiObject.ConnectedUserName,\r\n\t\t\t\tapiObject.IsConnected,\r\n\t\t\t\tstorageService,\r\n\t\t\t\tapiObject.ShowAlbum,\r\n\t\t\t\tapiObject.HasAlbumAccess,\r\n\t\t\t\tapiObject.PartnerLogoSvgUrl,\r\n\t\t\t\tapiObject.LocatePhotosUrl,\r\n\t\t\t\tapiObject.ImportPhotosUrl,\r\n\t\t\t\tapiObject.UseExternalPhotoPicker\r\n\t\t\t);\r\n\t\t// return partner store\r\n\t\treturn new core.partners.PartnerStore(\r\n\t\t\tapiObject.Name,\r\n\t\t\tapiObject.ConnectedUserName,\r\n\t\t\tapiObject.IsConnected,\r\n\t\t\tapiObject.StoreType,\r\n\t\t\tstorageService,\r\n\t\t\tapiObject.ShowAlbum,\r\n\t\t\tapiObject.ShowTokenExpiry,\r\n\t\t\tapiObject.HasAlbumAccess,\r\n\t\t\tapiObject.PartnerLogoSvgUrl,\r\n\t\t\tapiObject.LocatePhotosUrl,\r\n\t\t\tapiObject.ImportPhotosUrl,\r\n\t\t\tapiObject.UseExternalPhotoPicker\r\n\t\t);\r\n\t}\r\n\r\n\t// contentservice deserialisation\r\n\texport function BulkEditorGetAllProductsResultConvert(apiObject: eXpress.services.bulkeditor.IBulkEditorGetAllProductsResult): eXpress.core.bulkeditor.IBulkEditorGetAllProductsResult | null {\r\n\t\tif (!apiObject) return null;\r\n\r\n\t\treturn {\r\n\t\t\tproducts: apiObject.Products.map(p => eXpress.deserialization.productConvert(p)),\r\n\t\t\ttranslations: apiObject.Translations,\r\n\t\t\tbulkSequenceShapes: apiObject.BulkSequenceShapes\r\n\t\t};\r\n\t}\r\n\r\n\texport function TokenExpiryConvert(tokenexpiry: eXpress.services.TokenExpiry): eXpress.core.TokenExpiry {\r\n\t\treturn {\r\n\t\t\tcountdownVisibleNumber: tokenexpiry.CountDownBarVisibleMinutes,\r\n\t\t\ttokenExpiryDate: eXpress.deserialization.deserialiseDate(tokenexpiry.TokenExpiryDate)\r\n\t\t};\r\n\t}\r\n\r\n\t// orderservice deserialisation\r\n\texport function UpdateShoppingCartResultConvert(apiObject: eXpress.services.IUpdateShoppingCartResult): eXpress.core.IUpdateShoppingCartResult {\r\n\t\treturn {\r\n\t\t\taction: apiObject.Action,\r\n\t\t\tcartItemIds: apiObject.CartItemIds,\r\n\t\t\tredirectUrl: apiObject.RedirectUrl,\r\n\t\t\ttotalPrice: apiObject.TotalPrice\r\n\t\t};\r\n\t}\r\n\r\n\texport function UpdateCartItemQuantityResultConvert(apiObject: eXpress.services.IUpdateCartItemQuantityResult): eXpress.core.IUpdateCartItemQuantityResult {\r\n\t\treturn {\r\n\t\t\tcartItem: cartItemDataConvert(apiObject.CartItem),\r\n\t\t\tsuccess: apiObject.Success\r\n\t\t};\r\n\t}\r\n\r\n\t// cartitemConvert names was already taken, therefor cartItemData\r\n\texport function cartItemDataConvert(apiObject: eXpress.services.ICartItem): eXpress.core.ICartItem {\r\n\t\treturn {\r\n\t\t\tid: apiObject.Id,\r\n\t\t\tquantity: apiObject.Quantity\r\n\t\t};\r\n\t}\r\n\r\n\texport function cartItemConvert(apiObject: eXpress.services.bulkeditor.ICartItem): eXpress.core.bulkeditor.CartItem {\r\n\t\treturn {\r\n\t\t\tapplyAllFailed: apiObject.ApplyAllFailed,\r\n\t\t\tcreatedForced: deserialiseDate(apiObject.CreatedForced),\r\n\t\t\tdateModifiedParent: deserialiseDate(apiObject.DateModifiedParent),\r\n\t\t\tdatePictureTaken: deserialiseDate(apiObject.DatePictureTaken),\r\n\t\t\tfileSize: apiObject.FileSize,\r\n\t\t\tid: apiObject.Id,\r\n\t\t\tmanipulations: manipulationsConvert(apiObject.Manipulations),\r\n\t\t\toldFileSystem: apiObject.OldFileSystem,\r\n\t\t\toriginalFileName: apiObject.OriginalFileName,\r\n\t\t\toriginalHeight: apiObject.OriginalHeight,\r\n\t\t\toriginalWidth: apiObject.OriginalWidth,\r\n\t\t\tphotoCounter: apiObject.PhotoCounter,\r\n\t\t\tphotoId: apiObject.PhotoId,\r\n\t\t\tproducts: apiObject.Products.map(p => cartItemProductConvert(p)),\r\n\t\t\tthumbUrl: apiObject.ThumbUrl,\r\n\t\t\tmediumUrl: apiObject.MediumUrl,\r\n\t\t};\r\n\t}\r\n\r\n\texport function manipulationsConvert(apiObject: eXpress.services.bulkeditor.IManipulations): eXpress.core.mediastore.Manipulations {\r\n\t\treturn {\r\n\t\t\tcolorEffect: apiObject.ColorEffect,\r\n\t\t\theight: apiObject.Height,\r\n\t\t\tleft: apiObject.Left,\r\n\t\t\trotate90: apiObject.Rotate90,\r\n\t\t\ttop: apiObject.Top,\r\n\t\t\twidth: apiObject.Width\r\n\t\t};\r\n\t}\r\n\r\n\texport function cartItemProductConvert(apiObject: eXpress.services.bulkeditor.ICartItemProduct): eXpress.core.bulkeditor.CartItemProduct {\r\n\t\treturn {\r\n\t\t\tborder: apiObject.Border,\r\n\t\t\tcolorEffect: apiObject.ColorEffect,\r\n\t\t\tpaper: apiObject.Paper,\r\n\t\t\tproductCode: apiObject.ProductCode,\r\n\t\t\tquantity: apiObject.Quantity,\r\n\t\t\tcartItemId: apiObject.CartItemId\r\n\t\t};\r\n\t}\r\n\r\n\texport function productConvert(apiObject: eXpress.services.bulkeditor.IProduct): eXpress.core.bulkeditor.Product {\r\n\t\treturn {\r\n\t\t\tattributes: apiObject.Attributes,\r\n\t\t\tattributesDict: apiObject.AttributesDict,\r\n\t\t\tcode: apiObject.Code,\r\n\t\t\toptions: apiObject.Options,\r\n\t\t\toptionsDict: apiObject.OptionsDict\r\n\t\t};\r\n\t}\r\n}\r\n\r\nnamespace eXpress {\r\n\texport interface IPlatform {\r\n\t\tgenerateNewGuid(): string;\r\n\t\tsetTimeout(delayInMs: number, callback: (timer: IDisposable) => void): IDisposable;\r\n\t}\r\n}\r\n\r\nnamespace eXpress.core {\r\n\texport function showLoadingDialogAsync(promise: JQueryPromise, timeout = 500): JQueryPromise {\r\n\t\twindow.ShowLoadingDialog(timeout);\r\n\t\tconst blockingEventDisposables = eXpress.html.disableUserEvents();\r\n\t\treturn promise.always(() => {\r\n\t\t\tblockingEventDisposables.dispose();\r\n\t\t\twindow.HideLoadingDialog();\r\n\t\t});\r\n\t}\r\n\texport function showLoadingDialogPromiseAsync(promise: Promise, timeout = 500): Promise {\r\n\t\twindow.ShowLoadingDialog(timeout);\r\n\t\tconst blockingEventDisposables = eXpress.html.disableUserEvents();\r\n\t\treturn promise.finally(() => {\r\n\t\t\tblockingEventDisposables.dispose();\r\n\t\t\twindow.HideLoadingDialog();\r\n\t\t});\r\n\t}\r\n}\r\n\r\n// var globalHandled = false;\r\n// $.event.special.tap = {\r\n// \t// Abort tap if touch moves further than 10 pixels in any direction\r\n// \tdistanceThreshold: 10,\r\n// \t// Abort tap if touch lasts longer than half a second\r\n// \ttimeThreshold: 500,\r\n// \tsetup: function () {\r\n// \t\tvar self = this,\r\n// \t\t\t$self = $(self);\r\n\r\n// \t\t// Bind touch start\r\n// \t\t$self.on('touchstart', function (startEvent) {\r\n// \t\t\t// Save the target element of the start event\r\n// \t\t\tvar target = startEvent.target,\r\n// \t\t\t\ttouchStart = startEvent.originalEvent.touches ? startEvent.originalEvent.touches[0] : startEvent.originalEvent,\r\n// \t\t\t\tstartX = touchStart.pageX,\r\n// \t\t\t\tstartY = touchStart.pageY,\r\n// \t\t\t\tthreshold = $.event.special.tap.distanceThreshold,\r\n// \t\t\t\ttimeout;\r\n// \t\t\tglobalHandled = false;\r\n\r\n// \t\t\tfunction removeTapHandler() {\r\n// \t\t\t\tclearTimeout(timeout);\r\n// \t\t\t\t$self.off('touchmove', moveHandler).off('touchend', tapHandler);\r\n// \t\t\t}\r\n\r\n// \t\t\tfunction tapHandler(endEvent) {\r\n// \t\t\t\tremoveTapHandler();\r\n\r\n// \t\t\t\t// When the touch end event fires, check if the target of the\r\n// \t\t\t\t// touch end is the same as the target of the start, and if\r\n// \t\t\t\t// so, fire a click.\r\n// \t\t\t\tif (target === endEvent.target) {\r\n// \t\t\t\t\tif (!globalHandled) {\r\n// \t\t\t\t\t\tglobalHandled = true;\r\n// \t\t\t\t\t\t$.event.simulate('tap', self, endEvent);\r\n// \t\t\t\t\t}\r\n// \t\t\t\t}\r\n// \t\t\t}\r\n\r\n// \t\t\t// Remove tap and move handlers if the touch moves too far\r\n// \t\t\tfunction moveHandler(moveEvent) {\r\n// \t\t\t\tvar touchMove = moveEvent.originalEvent.touches[0] ? moveEvent.originalEvent.touches[0] : moveEvent.originalEvent,\r\n// \t\t\t\t\tmoveX = touchMove.pageX,\r\n// \t\t\t\t\tmoveY = touchMove.pageY;\r\n\r\n// \t\t\t\tif (Math.abs(moveX - startX) > threshold ||\r\n// \t\t\t\t\tMath.abs(moveY - startY) > threshold) {\r\n// \t\t\t\t\tremoveTapHandler();\r\n// \t\t\t\t}\r\n// \t\t\t}\r\n\r\n// \t\t\t// Remove the tap and move handlers if the timeout expires\r\n// \t\t\ttimeout = setTimeout(removeTapHandler, $.event.special.tap.timeThreshold);\r\n\r\n// \t\t\t// When a touch starts, bind a touch end and touch move handler\r\n// \t\t\t$self.on('touchmove', moveHandler).on('touchend', tapHandler);\r\n// \t\t});\r\n// \t}\r\n// };\r\n// /* tslint:enable:variable-name */\r\n// /* tslint:enable:interface-name */\r\n\r\nnamespace eXpress {\r\n\tclass Helpers {\r\n\t\tprivate isMobileField?: boolean;\r\n\r\n\t\tpublic get isMobileSize(): boolean {\r\n\t\t\tif (!eXpress.core.context.allowMobile)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\tif (this.isMobileField === undefined) {\r\n\t\t\t\tthis.isMobileField = (window.innerWidth <= eXpress.core.context.mobileTransitionScreenWidth);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.isMobileField;\r\n\t\t}\r\n\t}\r\n\r\n\texport const helpers = new Helpers();\r\n}\r\n\r\nnamespace eXpress.utils {\r\n\t/**\r\n\t* Checks if the given argument is undefined.\r\n\t*/\r\n\texport function isUndefined(obj: undefined): true;\r\n\texport function isUndefined(obj: any): obj is undefined;\r\n\texport function isUndefined(obj: any): obj is undefined {\r\n\t\treturn (typeof obj) === \"undefined\";\r\n\t}\r\n\r\n\texport function required(arg: T | null | undefined, message: string): T {\r\n\t\tif (!isUndefined(arg) && arg !== null) return arg;\r\n\t\tthrow new Error(\"Missing required argument: \" + message);\r\n\t}\r\n\r\n\texport function postAfterLinkClick(url: string, data: StringKeyValuePair[]) {\r\n\t\tconst form = document.createElement(\"form\");\r\n\t\tform.setAttribute(\"method\", 'POST');\r\n\t\tform.setAttribute(\"action\", url);\r\n\t\tdata.forEach(kv => {\r\n\t\t\tconst hiddenField = document.createElement(\"input\");\r\n\t\t\thiddenField.setAttribute(\"type\", \"hidden\");\r\n\t\t\thiddenField.setAttribute(\"name\", kv.Key);\r\n\t\t\thiddenField.setAttribute(\"value\", kv.Value);\r\n\t\t\tform.appendChild(hiddenField);\r\n\t\t});\r\n\t\tdocument.body.appendChild(form);\r\n\t\tform.submit();\r\n\t}\r\n\r\n\texport function waitAsync(delayInMs: number): JQueryPromise;\r\n\texport function waitAsync(delayInMs: number, resolveWith: T): JQueryPromise;\r\n\texport function waitAsync(delayInMs: number, resolveWith?: T): JQueryPromise {\r\n\t\tconst deferred = $.Deferred();\r\n\t\tbase.setTimeout(delayInMs, function waitAsyncTimeout() { deferred.resolve(resolveWith); }); // used function to have better call stack\r\n\t\treturn deferred.promise();\r\n\t}\r\n\r\n\texport function isNonEmptyArray(obj: any): boolean {\r\n\t\treturn Array.isArray(obj) && obj.length > 0;\r\n\t}\r\n\r\n\texport function changeUrlAndLog(tabName: string, tabValue?: string, skipChangeUrl = false) {\r\n\t\tlet url = window.location.href;\r\n\t\turl = utils.updateParameter('tab', tabName, url);\r\n\t\turl = utils.updateParameter('tabvalue', tabValue || \"\", url);\r\n\t\tif (historyJs.replaceState && !skipChangeUrl) {\r\n\t\t\thistoryJs.replaceState(null, \"\", url);\r\n\t\t}\r\n\t}\r\n\r\n\texport interface IRect { Top: number; Left: number; Width: number; Height: number; }\r\n\r\n\texport function displayPrice(price: number, addCurrency: boolean, addStar: boolean, context: any): string {\r\n\t\tlet display = '';\r\n\t\tif (addCurrency && context.displayCurrencyLeft)\r\n\t\t\tdisplay += context.currencySymbol + ' ';\r\n\t\tdisplay += price.toFixed(2).replace('.', context.decimalSeparator);\r\n\t\tif (addCurrency && !context.displayCurrencyLeft)\r\n\t\t\tdisplay += ' ' + context.currencySymbol;\r\n\t\tif (addStar)\r\n\t\t\tdisplay += '*';\r\n\t\treturn display;\r\n\t}\r\n\r\n\texport function calculateCrop(originalWidth: number, originalHeight: number, cropRatio): IRect {\r\n\t\tconst result: IRect = { Top: 0, Left: 0, Width: 0, Height: 0 };\r\n\t\tlet longestSide = originalWidth;\r\n\t\tlet shortestSide = originalHeight;\r\n\t\tif (originalHeight > originalWidth) {\r\n\t\t\tlongestSide = originalHeight;\r\n\t\t\tshortestSide = originalWidth;\r\n\t\t}\r\n\r\n\t\tlet cropLongestSide = 0;\r\n\t\tlet cropShortestSide = 0;\r\n\t\tif (longestSide * cropRatio >= shortestSide) {\r\n\t\t\t// It's too landscape, cut stuff from the longest side\r\n\t\t\tcropShortestSide = shortestSide;\r\n\t\t\tcropLongestSide = Math.round(cropShortestSide / cropRatio);\r\n\t\t\tresult.Left = Math.round((longestSide - cropLongestSide) / 2);\r\n\t\t\tresult.Top = 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// it's not landscape enough, cut stuff from the short side\r\n\t\t\tcropLongestSide = longestSide;\r\n\t\t\tcropShortestSide = Math.round(cropLongestSide * cropRatio);\r\n\t\t\tresult.Left = 0;\r\n\t\t\tresult.Top = Math.round((shortestSide - cropShortestSide) / 2);\r\n\t\t}\r\n\r\n\t\tif (originalWidth >= originalHeight) {\r\n\t\t\tresult.Width = cropLongestSide;\r\n\t\t\tresult.Height = cropShortestSide;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tresult.Width = cropShortestSide;\r\n\t\t\tresult.Height = cropLongestSide;\r\n\t\t\tconst x = result.Top;\r\n\t\t\tresult.Top = result.Left;\r\n\t\t\tresult.Left = x;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\texport function clone(obj: T): T {\r\n\t\tconst cloneObj = new (obj).constructor();\r\n\t\tfor (const attribute in obj) {\r\n\t\t\tif (typeof obj[attribute] === \"object\" && obj[attribute] !== null) {\r\n\t\t\t\tcloneObj[attribute] = utils.clone(obj[attribute]);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcloneObj[attribute] = obj[attribute];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn cloneObj;\r\n\t}\r\n\r\n\texport function findFirst(arr: T[], predicate: (element: T, i: number, arr: T[]) => boolean): T | undefined {\r\n\t\tlet result: T | undefined = undefined;\r\n\t\tarr.some(function (el, i) {\r\n\t\t\treturn predicate(el, i, arr) ? ((result = el), true) : false;\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param arr array to search in\r\n\t * @param predicate\r\n\t * @returns first element in array that matches the predicate or throws an error if no element found\r\n\t */\r\n\texport function findFirstOrError(arr: T[], predicate: (element: T, i: number, arr: T[]) => boolean): T {\r\n\t\tconst result = findFirst(arr, predicate);\r\n\t\tif (!result) throw new Error(\"No element found in array that matches predicate \");\r\n\t\treturn result;\r\n\t}\r\n\r\n\texport function findIndex(arr: T[], predicate: (element: T, i: number, arr: T[]) => boolean): number {\r\n\t\tlet index = -1;\r\n\t\tarr.some(function (el, i) {\r\n\t\t\treturn predicate(el, i, arr) ? ((index = i), true) : false;\r\n\t\t});\r\n\t\treturn index;\r\n\t}\r\n\r\n\texport function removeItem(arr: T[], predicate: (element: T, i: number, arr: T[]) => boolean): T[] {\r\n\t\tconst index = findIndex(arr, predicate);\r\n\r\n\t\tif (index > -1)\r\n\t\t\tarr.splice(index, 1);\r\n\r\n\t\treturn arr;\r\n\t}\r\n\r\n\texport function parseWcfJsonDate(s: string): Date {\r\n\t\tconst dateRegexResult = /Date\\(([^)]+)\\)/.exec(s);\r\n\t\tif (!dateRegexResult) throw new Error(\"Cannot parse WCF json date: \" + s);\r\n\r\n\t\treturn new Date(parseFloat(dateRegexResult[1]));\r\n\t}\r\n\r\n\texport function formatWcfJsonDate(date: Date): string {\r\n\t\treturn '/Date(' + date.getTime() + ')/';\r\n\t}\r\n\r\n\texport function convertDateToUtcDate(date: Date): Date {\r\n\t\treturn new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));\r\n\t}\r\n\r\n\t// returns format YYYY-MM-DD (for html5 date input fields)\r\n\texport function getFormattedDate(date: Date): string {\r\n\t\tlet year = date.getFullYear().toString();\r\n\t\tyear = year.length > 3 ? year\r\n\t\t\t: year.length > 2 ? '0' + year\r\n\t\t\t\t: year.length > 1 ? '00' + year\r\n\t\t\t\t\t: year.length > 0 ? '000' + year\r\n\t\t\t\t\t\t: '0000';\r\n\t\tlet month = (1 + date.getMonth()).toString();\r\n\t\tmonth = month.length > 1 ? month : '0' + month;\r\n\t\tlet day = date.getDate().toString();\r\n\t\tday = day.length > 1 ? day : '0' + day;\r\n\t\treturn year + '-' + month + '-' + day;\r\n\t}\r\n\r\n\texport function getDDMMYYYYDateWithHyphens(date: Date): string {\r\n\t\tconst formattedString = getFormattedDate(date);\r\n\t\tconst dateParts = formattedString.split(\"-\");\r\n\t\treturn utils.formatString(\"{0}-{1}-{2}\", dateParts[2], dateParts[1], dateParts[0]);\r\n\t}\r\n\r\n\texport function getDate(dateString: string): Date {\r\n\t\tconst regex = new RegExp(/(^(0?[1-9]|[12][0-9]|3[01])[\\/\\-](0?[1-9]|1[012])[\\/\\-]\\d{4}$)|(^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$)/);\r\n\t\tif (!regex.test(dateString))\r\n\t\t\tthrow Error(\"invalid date format: \" + dateString + \". Expected either YYYY-MM-DD or DD-MM-YYYY\");\r\n\r\n\t\tlet date: Date;\r\n\t\tconst firstPart = dateString.substr(0, dateString.indexOf(\"-\"));\r\n\t\tif (firstPart.length === 4)\r\n\t\t\tdate = new Date(dateString);\r\n\t\telse {\r\n\t\t\tconst dateParts = dateString.split(\"-\").map(s => +s);\r\n\t\t\tdate = new Date(dateParts[2], dateParts[1] - 1, dateParts[0]);\r\n\t\t}\r\n\r\n\t\treturn date;\r\n\t}\r\n\r\n\texport function parseJsonDate(jsonDate) {\r\n\t\t// Get the date time part\r\n\t\tconst dateTimePart = jsonDate.replace(/\\/+Date\\(([\\d+-]+)\\)\\/+/, '$1');\r\n\r\n\t\t// Check for + or - sign\r\n\t\tconst minusSignIndex = dateTimePart.indexOf('-');\r\n\t\tconst plusSignIndex = dateTimePart.indexOf('+');\r\n\r\n\t\t// Get the sign index\r\n\t\tconst signIndex = minusSignIndex > 0 ? minusSignIndex : plusSignIndex;\r\n\r\n\t\t// If sign index is not 0 then we are extracting offset part and\r\n\t\tlet ms = 0;\r\n\t\tlet offsetHours = 0;\r\n\t\tif (signIndex > 0) {\r\n\t\t\tconst datePart = dateTimePart.substring(0, signIndex);\r\n\t\t\tconst offsetPart = dateTimePart.substring(signIndex);\r\n\t\t\tconst offset = offsetPart.substring(0, 3) + '.' + ((parseFloat(offsetPart.substring(3)) / 60) * 100).toString();\r\n\t\t\tms = parseFloat(datePart);\r\n\t\t\toffsetHours = parseFloat(offset);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tms = parseFloat(dateTimePart);\r\n\t\t}\r\n\r\n\t\tconst date = new Date(ms);\r\n\r\n\t\t// convert to msec\r\n\t\t// add local time zone offset\r\n\t\t// get UTC time in msec\r\n\t\tconst utcTime = date.getTime() + (date.getTimezoneOffset() * 60000);\r\n\r\n\t\t// create new Date object for different timezone using supplied offset\r\n\t\treturn new Date(utcTime + (3600000 * offsetHours));\r\n\t}\r\n\r\n\t// month is zero based\r\n\texport function getDaysInMonth(m, y) {\r\n\t\tswitch (m) {\r\n\t\t\tcase 1:\r\n\t\t\t\treturn (y % 4 === 0 && y % 100) || y % 400 === 0 ? 29 : 28;\r\n\t\t\tcase 8: case 3: case 5: case 10:\r\n\t\t\t\treturn 30;\r\n\t\t\tdefault:\r\n\t\t\t\treturn 31;\r\n\t\t}\r\n\t}\r\n\r\n\t// supports both DD-MM-YYYY and YYYY-MM-DD\r\n\texport function validateDateParts(date: string) {\r\n\t\tlet year: number;\r\n\t\tlet day: number;\r\n\t\tconst dateParts = date.split(\"-\");\r\n\t\tconst month = +dateParts[1] - 1;\r\n\t\tif (dateParts[0].length === 4) {\r\n\t\t\tyear = +dateParts[0];\r\n\t\t\tday = +dateParts[2];\r\n\t\t}\r\n\t\telse {\r\n\t\t\tyear = +dateParts[2];\r\n\t\t\tday = +dateParts[0];\r\n\t\t}\r\n\r\n\t\treturn month >= 0 && month < 12 && day > 0 && day <= getDaysInMonth(month, year);\r\n\t}\r\n\r\n\texport function convertKeyValuePairToMap(raw: eXpress.core.KeyValuePair[]): eXpress.core.Map {\r\n\t\tconst dict: eXpress.core.Map = {};\r\n\t\tfor (let i = 0; i < raw.length; i++) {\r\n\t\t\tdict[raw[i].Key] = raw[i].Value;\r\n\t\t}\r\n\t\treturn dict;\r\n\t}\r\n\r\n\texport function getHeaderHeight(): number {\r\n\t\tlet headerHeight = 0;\r\n\t\t$('.measureHeader').each(function () {\r\n\t\t\theaderHeight += $(this).height()!;\r\n\t\t});\r\n\t\treturn headerHeight;\r\n\t}\r\n\r\n\texport function makeCssClass(raw: string): string {\r\n\t\traw = raw.replace(/\\./g, \"-\");\r\n\t\traw = raw.replace(/_/g, \"-\");\r\n\t\traw = raw.replace(/#/g, \"\");\r\n\t\treturn raw.toLowerCase();\r\n\t}\r\n\r\n\texport function getQueryString(url?: string): string {\r\n\t\turl = url || window.location.href;\r\n\t\tconst pos = url.indexOf(\"?\");\r\n\t\tif (pos > -1) {\r\n\t\t\treturn url.substring(pos + 1);\r\n\t\t} else {\r\n\t\t\treturn url;\r\n\t\t}\r\n\t}\r\n\r\n\texport function getQueryStringParameters(url?: string): { [key: string]: string } {\r\n\t\tconst queryString = eXpress.utils.getQueryString(url);\r\n\t\t// remove hash parameter and split querystring param\r\n\t\tconst pairs = queryString.split('#')[0].split(\"&\");\r\n\t\tconst params: { [key: string]: string } = {};\r\n\t\tfor (const pair of pairs) {\r\n\t\t\tconst [key, value] = pair.split(\"=\");\r\n\t\t\tparams[key.toLowerCase()] = value !== undefined ? value : \"true\"; // Providing just the key means key=true\r\n\t\t}\r\n\t\treturn params;\r\n\t}\r\n\r\n\texport function getQueryStringParameter(key: string, url?: string, required?: boolean): string;\r\n\texport function getQueryStringParameter(key: string, url?: string, required = false): string {\r\n\t\tconst queryStringParam = eXpress.utils.getQueryStringParameters(url)[key.toLowerCase()];\r\n\t\tif (required && !queryStringParam) throw new Error(`No queryStringParam for Required key: ${key}`);\r\n\t\treturn queryStringParam;\r\n\t}\r\n\r\n\texport function arrayToQuerystring(array: any[]) {\r\n\t\tlet result = '';\r\n\t\t$.each(array, (index, value) => {\r\n\t\t\tif (result)\r\n\t\t\t\tresult += ',';\r\n\r\n\t\t\tresult += value.toString();\r\n\t\t});\r\n\t\treturn result;\r\n\t}\r\n\r\n\texport function preventInvalidInput(textbox, regex, event, extraValidation?: (v: any) => boolean) {\r\n\t\tlet key = event.keyCode || event.which;\r\n\t\tif (key !== 8 && key !== 9 && key !== 13 && key !== 16 && key !== 17 && key !== 18) {\r\n\t\t\tlet newValue;\r\n\t\t\tkey = String.fromCharCode(key);\r\n\r\n\t\t\t// warning! we will always validate the value of the entire textbox\r\n\t\t\t// maybe use bool to make this aditional check optional\r\n\r\n\t\t\t// if the old value - or part of the old value - was selected, this need to be stripped of the result (see else)\r\n\t\t\t// if the cursor is not at the end of the text, new char needs to be inserted at cursor position. (see else)\r\n\t\t\tif (textbox[0].selectionStart === textbox[0].selectionEnd && textbox[0].selectionEnd === textbox.val().length) {\r\n\t\t\t\tnewValue = textbox.val() + key;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconst val1 = textbox.val().substr(0, textbox[0].selectionStart);\r\n\t\t\t\tconst val2 = textbox.val().substr(textbox[0].selectionEnd);\r\n\r\n\t\t\t\t// concat text in before selection start, the new char and the text after selection end.\r\n\t\t\t\tnewValue = val1 + key + val2;\r\n\t\t\t}\r\n\r\n\t\t\tif (!regex.test(newValue) || (extraValidation && !extraValidation(newValue))) {\r\n\t\t\t\ttextbox.stop();\r\n\t\t\t\ttextbox.css('border', '1px solid red');\r\n\t\t\t\tsetTimeout(function () { textbox.animate({ borderTopColor: '#c4c2d1', borderRightColor: '#c4c2d1', borderBottomColor: '#c4c2d1', borderLeftColor: '#c4c2d1' }, 500); }, 300);\r\n\t\t\t\tevent.returnValue = false;\r\n\t\t\t\tif (event.preventDefault) event.preventDefault();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\texport interface IDetectLastResult {\r\n\t\tisLastRequested: boolean;\r\n\t\tvalue: TOut;\r\n\t}\r\n\r\n\t/**\r\n\t * Wrapper for Async functions that check if the result is from the last request\r\n\t * This can be used to prevent race conditions for AJAX calls\r\n\t */\r\n\texport class DetectLast {\r\n\r\n\t\tprivate _execAsync: (args: TIn) => JQueryPromise;\r\n\t\tprivate _lastId = 0;\r\n\r\n\t\tconstructor(execAsync: (args: TIn) => JQueryPromise) {\r\n\t\t\tthis._execAsync = execAsync;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Execute async function and return object that also indicates if it is the result of the last request\r\n\t\t */\r\n\t\tpublic execAsync(args: TIn): JQueryPromise> {\r\n\t\t\tconst id = ++this._lastId;\r\n\t\t\treturn this._execAsync(args).then((result: TOut) => ({\r\n\t\t\t\tisLastRequested: id === this._lastId,\r\n\t\t\t\tvalue: result\r\n\t\t\t}));\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Mark executing calls as 'not last'\r\n\t\t */\r\n\t\tpublic cancel(): void {\r\n\t\t\t++this._lastId;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * return ID of the last executed async call\r\n\t\t */\r\n\t\tpublic getLastId(): number {\r\n\t\t\treturn this._lastId;\r\n\t\t}\r\n\t}\r\n\r\n\texport function formatString(s: string, ...args: string[]): string {\r\n\t\tlet formatted = s;\r\n\t\tfor (let i = 0; i < args.length; i++) {\r\n\t\t\tconst regexp = new RegExp('\\\\{' + i + '\\\\}', 'gi');\r\n\t\t\tformatted = formatted.replace(regexp, args[i]);\r\n\t\t}\r\n\t\treturn formatted;\r\n\t}\r\n\r\n\texport function isNumericValue(value: string): boolean {\r\n\t\tconst regex = /^\\d*$/;\r\n\t\treturn regex.test(value);\r\n\t}\r\n\r\n\texport function reduceFontsizeToFit(itemEl: HTMLElement, minFontsize = 0) {\r\n\t\tfunction isOverflown(element) {\r\n\t\t\treturn element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\r\n\t\t}\r\n\r\n\t\tlet fontSize = parseInt(getComputedStyle(itemEl).fontSize || \"0\", 10);\r\n\t\tfor (let j = fontSize; j > minFontsize; j--) {\r\n\t\t\tconst overflow = isOverflown(itemEl);\r\n\t\t\tif (overflow) {\r\n\t\t\t\tfontSize--;\r\n\t\t\t\titemEl.style.fontSize = fontSize + \"px\";\r\n\t\t\t} else {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Polyfills\r\n\r\n/* tslint:disable:interface-name */\r\ninterface Element {\r\n\tmsMatchesSelector(selectors: string): boolean;\r\n}\r\n\r\ninterface Array {\r\n\tincludes(searchElement: T): boolean;\r\n}\r\n/* tslint:enable:interface-name */\r\n\r\nnamespace eXpress {\r\n\r\n\t// Polyfill matches\r\n\tif (!Element.prototype.matches) {\r\n\t\tElement.prototype.matches = (Element.prototype as any).msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n\t}\r\n\r\n\t// Polyfill closest\r\n\tif (!Element.prototype.closest) {\r\n\t\tElement.prototype.closest = function closestPolyfill(s: any) {\r\n\t\t\tconst el = this;\r\n\t\t\tlet ancestor = this;\r\n\t\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\t\tdo {\r\n\t\t\t\tif (ancestor.matches(s)) return ancestor;\r\n\t\t\t\tancestor = ancestor.parentElement;\r\n\t\t\t} while (ancestor !== null);\r\n\t\t\treturn null;\r\n\t\t};\r\n\t}\r\n\r\n\t// Polyfill insertAdjacentElement\r\n\tif (!Element.prototype.insertAdjacentElement) {\r\n\t\tElement.prototype.insertAdjacentElement = function (position, elem) {\r\n\t\t\tswitch (position.toString().toUpperCase()) {\r\n\t\t\t\tcase \"BEFOREBEGIN\":\r\n\t\t\t\t\treturn this.parentNode.insertBefore(elem, this);\r\n\t\t\t\tcase \"AFTERBEGIN\":\r\n\t\t\t\t\treturn this.insertBefore(elem, this.firstChild);\r\n\t\t\t\tcase \"BEFOREEND\":\r\n\t\t\t\t\treturn this.appendChild(elem);\r\n\t\t\t\tcase \"AFTEREND\":\r\n\t\t\t\t\treturn this.parentNode.insertBefore(elem, this.nextSibling);\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new Error(\"Invalid element position `\" + position + \"`\");\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\t// Polyfill Array.includes()\r\n\tif (!Array.prototype.includes) {\r\n\t\tObject.defineProperty(Array.prototype, 'includes', {\r\n\t\t\tvalue: function (searchElement, fromIndex) {\r\n\r\n\t\t\t\t// 1. Let O be ? ToObject(this value).\r\n\t\t\t\tif (this == null) {\r\n\t\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst o = Object(this);\r\n\r\n\t\t\t\t/* tslint:disable:no-bitwise */\r\n\r\n\t\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n\t\t\t\tconst len = o.length >>> 0;\r\n\r\n\t\t\t\t// 3. If len is 0, return false.\r\n\t\t\t\tif (len === 0) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 4. Let n be ? ToInteger(fromIndex).\r\n\t\t\t\t// (If fromIndex is undefined, this step produces the value 0.)\r\n\t\t\t\tconst n = fromIndex | 0;\r\n\r\n\t\t\t\t/* tslint:enable:no-bitwise */\r\n\r\n\t\t\t\t// 5. If n ≥ 0, then\r\n\t\t\t\t// a. Let k be n.\r\n\t\t\t\t// 6. Else n < 0,\r\n\t\t\t\t// a. Let k be len + n.\r\n\t\t\t\t// b. If k < 0, let k be 0.\r\n\t\t\t\tlet k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n\r\n\t\t\t\t// 7. Repeat, while k < len\r\n\t\t\t\twhile (k < len) {\r\n\t\t\t\t\t// a. Let elementK be the result of ? Get(O, ! ToString(k)).\r\n\t\t\t\t\t// b. If SameValueZero(searchElement, elementK) is true, return true.\r\n\t\t\t\t\t// c. Increase k by 1.\r\n\t\t\t\t\t// NOTE: === provides the correct \"SameValueZero\" comparison needed here.\r\n\t\t\t\t\tif (o[k] === searchElement) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tk++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 8. Return false\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// Polyfill ParentNode.append()\r\n\t(function (arr) {\r\n\t\tarr.forEach(function (item) {\r\n\t\t\tif (Object.hasOwnProperty.call(item, 'append')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tObject.defineProperty(item, 'append', {\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tenumerable: true,\r\n\t\t\t\twritable: true,\r\n\t\t\t\tvalue: function append(...args) {\r\n\t\t\t\t\tconst docFrag = document.createDocumentFragment();\r\n\r\n\t\t\t\t\targs.forEach(function (argItem) {\r\n\t\t\t\t\t\tconst isNode = argItem instanceof Node;\r\n\t\t\t\t\t\tdocFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.appendChild(docFrag);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\r\n}\r\n\r\nnamespace eXpress.services {\r\n\texport declare let serviceDeps: IServiceDependencies;\r\n\r\n\texport class TokenExpiry {\r\n\t\tCountDownBarVisibleMinutes: number;\r\n\t\tTokenExpiryDate: string;\r\n\t}\r\n\r\n\texport enum DesignFilterCountName {\r\n\t\tOccasion = 1,\r\n\t\tPurpose = 2,\r\n\t\tSearchcolor = 3,\r\n\t\tNumberofphotos = 4,\r\n\t\tPrice = 5,\r\n\t\tProductcode = 6,\r\n\t\tPredefinedproductcategory = 7,\r\n\t\tOrientation = 8\r\n\t}\r\n\r\n\texport interface IDesignFilterItemCount {\r\n\t\tName: string;\r\n\t\tCount: number;\r\n\t}\r\n\r\n\t// start Storage service interfaces\r\n\texport interface IPhotos {\r\n\t\treadonly Photos: IPhoto[];\r\n\t\treadonly PageToken: string;\r\n\t\treadonly StoreType: StoreType;\r\n\t}\r\n\r\n\texport interface IPhoto {\r\n\t\treadonly Id: string;\r\n\t\treadonly Code: string;\r\n\t\treadonly AccountId: string;\r\n\t\treadonly FolderId: string;\r\n\t\treadonly Name: string;\r\n\t\treadonly Description: string;\r\n\t\treadonly OriginalFilename: string;\r\n\t\treadonly ThumbUrl: string;\r\n\t\treadonly MediumUrl: string;\r\n\t\treadonly HiresUrl: string;\r\n\t\treadonly DownloadUrl: string;\r\n\t\treadonly RelativeMediumUrl: string;\r\n\t\treadonly Width: number;\r\n\t\treadonly Height: number;\r\n\t\treadonly Rotate90: number;\r\n\t\treadonly FileSize: number;\r\n\t\treadonly DateTaken: string;\r\n\t\treadonly DateUploaded: string;\r\n\t\treadonly DateModified: string;\r\n\t\treadonly Hash: string;\r\n\t}\r\n\r\n\texport interface IPhotoStore {\r\n\t\treadonly StoreType: StoreType;\r\n\t\treadonly Name: string;\r\n\t\treadonly ConnectedUserName: string;\r\n\t\treadonly IsConnected: boolean;\r\n\t\treadonly LocatePhotosUrl: string;\r\n\t\treadonly ImportPhotosUrl: string;\r\n\t\treadonly UseExternalPhotoPicker: boolean;\r\n\t\treadonly ShowAlbum: boolean;\r\n\t\treadonly HasAlbumAccess: boolean;\r\n\t\treadonly PartnerLogoSvgUrl: string;\r\n\t\treadonly ShowTokenExpiry: boolean;\r\n\t}\r\n\r\n\texport enum StoreType {\r\n\t\teXpress = 0,\r\n\t\tGooglePhotos = 2,\r\n\t\tFacebook = 3,\r\n\t\tInstagram = 4,\r\n\t\tSwissCom = 5,\r\n\t\tLocal = 10\r\n\t}\r\n\r\n\texport enum SortOrder {\r\n\t\tAscending = 0,\r\n\t\tDescending = 1\r\n\t}\r\n\r\n\texport enum PhotoSortBy {\r\n\t\tDateTaken = 0,\r\n\t\tDateUploaded = 1,\r\n\t\tDateModified = 2,\r\n\t\tName = 3,\r\n\t\tOriginalFilename = 4\r\n\t}\r\n\r\n\texport enum FolderSortField {\r\n\t\tNone = 0,\r\n\t\tName = 1,\r\n\t\tDateCreated = 2,\r\n\t\tDateModified = 3,\r\n\t\tOwner = 4,\r\n\t\tInvitationDate = 5,\r\n\t\tLastFileAdded = 6,\r\n\t\tDateStorage = 7\r\n\t}\r\n\r\n\texport interface IPhotoFolders {\r\n\t\treadonly Folders: IPhotoFolder[];\r\n\t\treadonly PageToken: string;\r\n\t\treadonly StoreType: StoreType;\r\n\t}\r\n\r\n\texport interface ExternalPhotoPicker {\r\n\t\treadonly Id: string;\r\n\t\treadonly MediaItemsSet: boolean;\r\n\t\treadonly PickerUri: string;\r\n\t\treadonly PollingIntervalInSec: number;\r\n\t\treadonly ExpiresInSec: number;\r\n\t}\r\n\r\n\texport interface IPhotoFolder {\r\n\t\treadonly Id?: string;\r\n\t\treadonly FileCount: number;\r\n\t\treadonly Name: string;\r\n\t\treadonly ThumbUrl: string;\r\n\t\treadonly MediumUrl: string;\r\n\t\treadonly DateCreated: string;\r\n\t\treadonly Code?: string;\r\n\t\treadonly StoreType?: services.StoreType;\r\n\t\treadonly ThumbUrlRotation90?: number;\r\n\t}\r\n\r\n\texport interface IStorageId {\r\n\t\treadonly Id: string;\r\n\t\treadonly AccountId?: string;\r\n\t}\r\n\t// end Storage service interfaces\r\n\r\n\t// start Upload service interfaces\r\n\r\n\texport enum ImportStatus {\r\n\t\tWaiting = 0,\r\n\t\tImported = 1,\r\n\t\tFailed = 2,\r\n\t\tNotFound = 3\r\n\t}\r\n\r\n\texport interface ICreateUploadSessionResult {\r\n\t\treadonly FolderId: string;\r\n\t\treadonly Id: string;\r\n\t\treadonly UploadUrl: string;\r\n\t}\r\n\r\n\texport interface ICheckImportStatusResultItem {\r\n\t\treadonly FileId: string;\r\n\t\treadonly Info: string;\r\n\t\treadonly OriginalFileName: string;\r\n\t\treadonly Status: ImportStatus;\r\n\t}\r\n\r\n\t// start design selection service\r\n\r\n\t// enums\r\n\texport enum OptionInDsp {\r\n\t\tHide = 0,\r\n\t\tIcons = 1,\r\n\t\tDropdown = 2\r\n\t}\r\n\r\n\t// Combines DesignVariantInListDSP && DesignVariantInopenDsp\r\n\r\n\texport enum DSPType {\r\n\t\tListDSP = 0,\r\n\t\tOpenDSP = 1\r\n\t}\r\n\r\n\texport interface IIcon {\r\n\t\tIconSvg: string;\r\n\t\tIconColorCode: string;\r\n\t\tIconOverLayColorCode: string | null;\r\n\t\tLabel: string;\r\n\t\tOrientation: Orientation | null;\r\n\t}\r\n\r\n\texport enum InDsp {\r\n\t\tHide = 0,\r\n\t\tIconsSmall = 1,\r\n\t\tIcons = 2,\r\n\t\tIconsWithText = 3,\r\n\t\tDropdown = 4\r\n\t}\r\n\r\n\texport enum Orientation {\r\n\t\tUndefined = 0,\r\n\t\tHorizontal = 1,\r\n\t\tVertical = 2,\r\n\t\tSquare = 3,\r\n\t}\r\n\r\n\t// end design selection service\r\n\r\n\texport class DownloadService extends ServiceBase {\r\n\t\tprotected url: string;\r\n\t\tprivate productCategoryGroup: string;\r\n\r\n\t\tconstructor(apiHostUrl: string, productCategoryGroup: string) {\r\n\t\t\tsuper(apiHostUrl, \"DownloadService.svc/json/\");\r\n\t\t\tthis.productCategoryGroup = productCategoryGroup;\r\n\t\t}\r\n\r\n\t\tpublic createDownloadSessionForPartnerPhotosAsync(partnerPhotoData: services.IPartnerPhotoData[], pointOfSaleId: string, accountId: string, language: string, flow: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tlanguageISO: language,\r\n\t\t\t\trequestList: partnerPhotoData.map(pd => {\r\n\t\t\t\t\treturn { ...pd, ImageUrl: pd.StoreType === StoreType.GooglePhotos ? `${pd.ImageUrl}|${pd.Code}` : pd.ImageUrl };\r\n\t\t\t\t}),\r\n\t\t\t\tflow: flow,\r\n\t\t\t\tproductCategoryGroup: this.productCategoryGroup\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON(this.url + \"CreateDownloadSessionForPartnerPhotos\", args);\r\n\t\t}\r\n\r\n\t\tpublic downloadPartnerCheckStatusFilesAsync(fileIdsToCheck: string[], accountId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tfileIds: fileIdsToCheck\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ CheckDownloadStatusResult: IDownloadStatusResult[] }>(this.url + \"CheckDownloadStatus\", args)\r\n\t\t\t\t.then(result => result.CheckDownloadStatusResult);\r\n\t\t}\r\n\t}\r\n\r\n\texport type GetDesignsResult = any;\r\n\r\n\texport interface IGetDesignsResult {\r\n\t\tDesignCount: any;\r\n\t\tDesignFilterCount: any;\r\n\t\tDesigns: IDesign[];\r\n\t}\r\n\r\n\texport interface IDesign {\r\n\t\treadonly Key?: string;\r\n\t\treadonly AlternativeColors?: IAlternativeColor[];\r\n\t\treadonly Color: string;\r\n\t\treadonly DisplayPrice: string;\r\n\t\treadonly ShowStar: boolean;\r\n\t\treadonly DisplayPricePerUnit: string;\r\n\t\treadonly DspName: string;\r\n\t\treadonly DspOverlayUrl: string;\r\n\t\treadonly New: boolean;\r\n\t\treadonly OpenDspOverlayUrl: string;\r\n\t\treadonly PackshotUrl: string;\r\n\t\treadonly PredefinedProductName: string;\r\n\t\treadonly Product: IProduct;\r\n\t\treadonly ProductAlternativesGroups: IProductAlternativesGroup[];\r\n\t\treadonly ProductCategory: IProductCategory;\r\n\t\treadonly ProductCategoryCode: string;\r\n\t\treadonly ProductCategoryGroupCode: string;\r\n\t\treadonly ProductCategoryGroups: string[];\r\n\t\treadonly ProductCode: string;\r\n\t\treadonly Pvc: string;\r\n\t\treadonly Top: boolean;\r\n\t\treadonly TemporaryUnavailable: boolean;\r\n\t\treadonly ProductVariantName: string;\r\n\t\treadonly Dimensions: string;\r\n\t\treadonly CanSwitchBackgroundInCreator: boolean;\r\n\t\treadonly HasSets: boolean;\r\n\t\treadonly SupportsPersonalData: boolean;\r\n\t\treadonly Debug: string;\r\n\t}\r\n\r\n\texport interface IConstellation {\r\n\t\tConstellationName: string;\r\n\t\tProductCode: string;\r\n\t\tProductName: string;\r\n\t\tShortName: string;\r\n\t}\r\n\r\n\texport interface IAlternativeColor {\r\n\t\tColor: string;\r\n\t\tDesignVariant?: IDesignVariant;\r\n\t\tPredefinedProductName: string;\r\n\t\tProductCode: string;\r\n\t}\r\n\r\n\texport interface IDesignVariant {\r\n\t\tDesignVariantName: string;\r\n\t\tIcon: string;\r\n\t\tIconColorCode: string;\r\n\t}\r\n\r\n\texport interface IProduct {\r\n\t\tName: string;\r\n\t\tShortName: string;\r\n\t\tDesignVariantInListDSP: services.InDsp;\r\n\t\tDesignVariantInOpenDSP: services.InDsp;\r\n\t}\r\n\r\n\texport interface IProductAlternativesGroup {\r\n\t\tInCreator: any;\r\n\t\tInListDSP: services.InDsp;\r\n\t\tInOpenDSP: services.InDsp;\r\n\t\tProductAlternatives: IProductAlternative[];\r\n\t\tTitle: string;\r\n\t}\r\n\r\n\texport interface IProductAlternative {\r\n\t\tDesignWillBeLost: boolean;\r\n\t\tIcon: string;\r\n\t\tIconColorCode: string;\r\n\t\tIconOverlayColorCode: string;\r\n\t\tOrientation: string;\r\n\t\tPredefinedProductName: string;\r\n\t\tProductCategoryCode: string;\r\n\t\tProductCode: string;\r\n\t\tProductVariantCode: string;\r\n\t\tTitle: string;\r\n\t}\r\n\r\n\texport interface IProductCategory {\r\n\t\tName: string;\r\n\t\tShortName: string;\r\n\t\tShowMeasurements: boolean;\r\n\t}\r\n\r\n\texport interface IDesignDetail {\r\n\t\tAttributeDetails?: IDesignAttributeDetails;\r\n\t\tDisableOverlays: boolean;\r\n\t\tEditorStartLink: string;\r\n\t\tProductOptionGroups?: IDesignProductOptionGroup[];\r\n\t\tProductPreviewImageCount: number;\r\n\t\tProductPreviewImageUrls: string[];\r\n\t\tQuantityBreakPriceDetails: IDesignQuantityBreakPriceDetails;\r\n\t\tShipmentDetails: { [key: string]: any };\r\n\t\tUSPs: string;\r\n\t\tVariablePriceDetails: any | null;\r\n\t\tPromotionDetails?: any;\r\n\t\tOccasionPackShot: string;\r\n\t\tPurposePackShot: string;\r\n\t\tProductDimensions: string;\r\n\t}\r\n\r\n\texport interface IDesignAttributeDetails {\r\n\t\tName: string;\r\n\t\tValues?: IDesignAttributeDetailsValue[];\r\n\t}\r\n\r\n\texport interface IDesignAttributeDetailsValue {\r\n\t\tCode: string;\r\n\t\t// whether this option is the default\r\n\t\tDefault: boolean;\r\n\t\tName: string;\r\n\t\tQuantityBreakPriceDetails: any | null;\r\n\t}\r\n\r\n\texport interface IDesignQuantityBreakPriceDetails {\r\n\t\tDefaultQuantityBreaks: number;\r\n\t\tQuantityBreaks: IDesignQuantityBreak[];\r\n\t}\r\n\r\n\texport interface IDesignQuantityBreak {\r\n\t\tBreak: number;\r\n\t\tPrice: number;\r\n\t}\r\n\r\n\texport interface IDesignProductOptionGroup {\r\n\t\tName: string;\r\n\t\tCode: string;\r\n\t\tInDsp: any;\r\n\t\tInCreator: any;\r\n\t\tInOptionPage: any;\r\n\t\tDescription: string;\r\n\t\tProductOptions: IDesignProductOption[] | null;\r\n\t\tSiblingDataOptionUSPs?: any;\r\n\t\tSiblingDataPageTitle?: string;\r\n\t\tSpecification?: any;\r\n\t\tTitle: string;\r\n\t}\r\n\r\n\texport interface IDesignProductOption {\r\n\t\tCode: string;\r\n\t\tDefaultProductOption: boolean;\r\n\t\tOpenDspOverlayUrl?: string;\r\n\t\tDspOverlayUrl?: string;\r\n\t\tAlternativeOptionGroup: string;\r\n\t\tName: string;\r\n\t\tPrice: number;\r\n\t\tVarPrice: number;\r\n\t\tShortName: string;\r\n\t\tSpecification?: any;\r\n\t\tVarAmount: number;\r\n\t}\r\n\r\n\texport interface IProductCategoryDetails {\r\n\t\tShortName: string;\r\n\t\tName: string;\r\n\t\tShortTitle: string;\r\n\t\tTitle: string;\r\n\t\tProductCategoryCode: string;\r\n\t\tImageUrl: string;\r\n\t\tDisplayPrice: string;\r\n\t\tLinkToProductCategoryPage: string;\r\n\t\tEyeCatcher: string;\r\n\t}\r\n\r\n\texport interface IGetProductCategoriesResult {\r\n\t\tProductCategories: IProductCategoryDetails[];\r\n\t\tTotalNumberOfResults: number;\r\n\t}\r\n\r\n\texport class SelectionPageService extends ServiceBase {\r\n\r\n\t\tprotected url: string;\r\n\r\n\t\tconstructor(apiHostUrl: string) {\r\n\t\t\tsuper(apiHostUrl, \"SelectionPageService.svc/json/\");\r\n\t\t}\r\n\r\n\t\tpublic getDesignsAsync(pointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tmainProductCategoryGroupCode: string | undefined,\r\n\t\t\toccasion: string | undefined,\r\n\t\t\tpurpose: string | undefined,\r\n\t\t\tproductCode: string[],\r\n\t\t\torientation: string | undefined,\r\n\t\t\tpredefinedProductCategory: string[],\r\n\t\t\tsearchColor: string[],\r\n\t\t\timageCount: number[],\r\n\t\t\tprice: number[],\r\n\t\t\tpageNumber: number,\r\n\t\t\tpageSize: number,\r\n\t\t\toptions: string[],\r\n\t\t\toptionGroup: string,\r\n\t\t\townDesign: boolean,\r\n\t\t\tsortMethod: string | undefined,\r\n\t\t\tdesignGroup: string | undefined,\r\n\t\t\tgender: string | undefined,\r\n\t\t\tshowDebug: boolean,\r\n\t\t\tpreselectOccasion: string | undefined\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId: pointOfSaleId,\r\n\t\t\t\tlanguage: language,\r\n\t\t\t\tmainProductCategoryGroupCode: mainProductCategoryGroupCode,\r\n\t\t\t\toccasion: occasion,\r\n\t\t\t\tpurpose: purpose,\r\n\t\t\t\tproductCode: productCode,\r\n\t\t\t\torientation,\r\n\t\t\t\tpredefinedProductCategory: predefinedProductCategory,\r\n\t\t\t\tsearchColor: searchColor,\r\n\t\t\t\timageCount: imageCount,\r\n\t\t\t\tprice: price,\r\n\t\t\t\tpageNumber: pageNumber,\r\n\t\t\t\tpageSize: pageSize,\r\n\t\t\t\toptions: options,\r\n\t\t\t\toptionGroup,\r\n\t\t\t\townDesign: ownDesign,\r\n\t\t\t\tsortMethod: sortMethod,\r\n\t\t\t\tdesignGroup: designGroup,\r\n\t\t\t\tgender: gender,\r\n\t\t\t\tshowDebug: showDebug,\r\n\t\t\t\tpreselectOccasion: preselectOccasion\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON(this.url + 'GetDesigns', args)\r\n\t\t\t\t.then(res => deserialization.getDesignsResultConvert(res));\r\n\t\t}\r\n\r\n\t\tpublic getProductCategories(pointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tpageNumber: number,\r\n\t\t\tpageSize: number,\r\n\t\t\tproductCategories: string[],\r\n\t\t\ttagValues: string[],\r\n\t\t\tsortMethod?: string,\r\n\t\t\ttheme?: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId: pointOfSaleId,\r\n\t\t\t\tlanguage: language,\r\n\t\t\t\tpageNumber: pageNumber,\r\n\t\t\t\tpageSize: pageSize,\r\n\t\t\t\tproductCategories: productCategories,\r\n\t\t\t\ttagValues: tagValues,\r\n\t\t\t\tsortMethod: sortMethod,\r\n\t\t\t\ttheme: theme\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON(this.url + 'GetProductCategories', args);\r\n\t\t}\r\n\r\n\t\tpublic getDesign(pointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tpredefinedProductName: string,\r\n\t\t\tproductCode: string,\r\n\t\t\toccasion: string | undefined,\r\n\t\t\tpurpose: string | undefined,\r\n\t\t\toptions: string[],\r\n\t\t\toptionGroup: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId: pointOfSaleId,\r\n\t\t\t\tlanguage: language,\r\n\t\t\t\tpredefinedProductName: predefinedProductName,\r\n\t\t\t\tproductCode: productCode,\r\n\t\t\t\toccasion: occasion,\r\n\t\t\t\tpurpose: purpose,\r\n\t\t\t\toptions: options,\r\n\t\t\t\toptionGroup\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON(this.url + 'GetDesign', args)\r\n\t\t\t\t.then(res => { return deserialization.designConvert(res as services.IDesign); });\r\n\t\t}\r\n\r\n\t\tpublic getDesignDetail(pointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tpredefinedProductName: string,\r\n\t\t\tproductCode: string,\r\n\t\t\toccasion: string | undefined,\r\n\t\t\tpurpose: string | undefined,\r\n\t\t\ttheme: string | undefined,\r\n\t\t\toptions: string | undefined\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tlanguage,\r\n\t\t\t\tpredefinedProductName,\r\n\t\t\t\tproductCode,\r\n\t\t\t\toccasion,\r\n\t\t\t\tpurpose,\r\n\t\t\t\ttheme,\r\n\t\t\t\toptions\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON(this.url + 'GetDesignDetail', args)\r\n\t\t\t\t.then(res => { return deserialization.designDetailConvert(res as services.IDesignDetail); });\r\n\t\t}\r\n\r\n\t\tpublic getConstellationsAsync(pointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tproductCode: string,\r\n\t\t\tpredefinedProductName: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId: pointOfSaleId,\r\n\t\t\t\tlanguage: language,\r\n\t\t\t\tproductCode: productCode,\r\n\t\t\t\tpredefinedProductName: predefinedProductName\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON(this.url + 'GetConstellations', args)\r\n\t\t\t\t.then(res => res.map(c => deserialization.designConstellationConvert(c)));\r\n\t\t}\r\n\r\n\t\tpublic GetDesignFilterCount(\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tdesignFilterCountName: DesignFilterCountName,\r\n\t\t\toccasion?: string,\r\n\t\t\tpurpose?: string,\r\n\t\t\tmainProductCategoryGroupCode?: string,\r\n\t\t\tproductCodes?: string[],\r\n\t\t\torientation?: string,\r\n\t\t\tpredefinedProductCategories?: string[],\r\n\t\t\tsearchColors?: string[],\r\n\t\t\timageCounts?: number[],\r\n\t\t\tprices?: number[],\r\n\t\t\tgender?: string,\r\n\t\t\townDesign?: boolean): JQueryPromise {\r\n\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tlanguage,\r\n\t\t\t\tdesignFilterCountName,\r\n\t\t\t\toccasion,\r\n\t\t\t\tpurpose,\r\n\t\t\t\tmainProductCategoryGroupCode: [mainProductCategoryGroupCode],\r\n\t\t\t\tproductCode: productCodes,\r\n\t\t\t\torientation,\r\n\t\t\t\tpredefinedProductCategory: predefinedProductCategories,\r\n\t\t\t\tsearchColor: searchColors,\r\n\t\t\t\timageCount: imageCounts,\r\n\t\t\t\tprice: prices,\r\n\t\t\t\townDesign,\r\n\t\t\t\tdesignGroup: null,\r\n\t\t\t\tgender\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON(this.url + 'GetDesignFilterCount', args);\r\n\t\t}\r\n\r\n\t\tpublic getQuantityBreakOnlyByMaASync(pointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tproductCode: string): JQueryPromise {\r\n\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tlanguage,\r\n\t\t\t\tproductCode\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON(this.url + 'QuantityBreakOnlyByMA', args);\r\n\t\t}\r\n\t}\r\n\r\n\texport class StorageService extends ServiceBase {\r\n\t\tprotected url: string;\r\n\r\n\t\tconstructor(apiHostUrl: string) {\r\n\t\t\tsuper(apiHostUrl, \"StorageService.svc/json/\");\r\n\t\t}\r\n\r\n\t\tpublic getPhotoStoresAsync(\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\tlanguage: string,\r\n\t\t\tskipIsConnectedCheck = false,\r\n\t\t\tskipPhotoDownload = false,\r\n\t\t\tskipSignleSignOn = false,\r\n\t\t\tmaxNumberOfRetries = 0,\r\n\t\t\tretry = 0\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tlanguage,\r\n\t\t\t\tmaxNumberOfRetries,\r\n\t\t\t\tretry,\r\n\t\t\t\tskipIsConnectedCheck,\r\n\t\t\t\tskipPhotoDownload,\r\n\t\t\t\tskipSignleSignOn\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.getJSON<{ GetPhotoStoresResult: IPhotoStore[] }>(this.url + 'GetPhotoStores', args)\r\n\t\t\t\t.then(res => res.GetPhotoStoresResult.map(store => deserialization.photoStoreConvert(store, this)));\r\n\t\t}\r\n\r\n\t\tpublic getFolderListWithThumbAsync(\r\n\t\t\taccountId: string,\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\tfolderId: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tfolderId,\r\n\t\t\t\tsortField: FolderSortField.DateCreated,\r\n\t\t\t\tsortOrder: SortOrder.Descending\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.getJSON<{ GetFolderListWithThumbResult: IPhotoFolder[] }>(this.url + 'GetFolderListWithThumb', args)\r\n\t\t\t\t.then(res => res.GetFolderListWithThumbResult.map((folder) => eXpress.deserialization.photoFolderConvert(folder, this)));\r\n\t\t}\r\n\r\n\t\tpublic getPhotosByFolderAsync(\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\taccountId: string,\r\n\t\t\tfolderId: string,\r\n\t\t\tpage: number,\r\n\t\t\tpageSize: number,\r\n\t\t\tsortBy: PhotoSortBy,\r\n\t\t\tsortOrder: SortOrder,\r\n\t\t\treadOnly: boolean): JQueryPromise {\r\n\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tfolderId,\r\n\t\t\t\tpage,\r\n\t\t\t\tpageSize,\r\n\t\t\t\tsortBy,\r\n\t\t\t\tsortOrder,\r\n\t\t\t\treadOnly\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.getJSON<{ GetPhotosByFolderResult: eXpress.services.IPhoto[] }>(this.url + \"GetPhotosByFolder\", args)\r\n\t\t\t\t.then(res => {\r\n\t\t\t\t\tif (!res) return [];\r\n\r\n\t\t\t\t\treturn res.GetPhotosByFolderResult.map((photo) => eXpress.deserialization.photoConvert(photo));\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tpublic getPhotosAsync(\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\taccountId: string,\r\n\t\t\tfolderId: string,\r\n\t\t\tids: string[],\r\n\t\t\tuseDeselected = false,\r\n\t\t\tisSelectAllActive = false): JQueryPromise {\r\n\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tfolderId,\r\n\t\t\t\tids,\r\n\t\t\t\tuseDeselected,\r\n\t\t\t\tisSelectAllActive\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{ GetExpressPhotosResult: eXpress.services.IPhoto[] }>(this.url + \"GetExpressPhotos\", args)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\treturn res.GetExpressPhotosResult.map((photo) => eXpress.deserialization.photoConvert(photo));\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tpublic getPhotosByFoldersAsync(\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\taccountId: string,\r\n\t\t\tfolderIds: string[],\r\n\t\t\tuseDeselected = false,\r\n\t\t\tlimit = -1): JQueryPromise {\r\n\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tfolderIds,\r\n\t\t\t\tuseDeselected,\r\n\t\t\t\tlimit\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{ GetPhotosByFoldersResult: eXpress.services.IPhoto[] }>(this.url + \"GetPhotosByFolders\", args)\r\n\t\t\t\t.then((res) => {\r\n\t\t\t\t\treturn res.GetPhotosByFoldersResult.map((photo) => eXpress.deserialization.photoConvert(photo));\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tpublic deleteMediaStorePartnerAccountMemberAsync(\r\n\t\t\tstoreCode: core.StoreCode,\r\n\t\t\taccountId: string,\r\n\t\t\tpointOfSaleId: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tmediaStorePartnerType: serialization.convertStoreCodeToStoreType(storeCode),\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON<{ DeleteMediaStorePartnerAccountMemberResult: boolean }>(this.url + 'DeleteMediaStorePartnerAccountMember', args).then(res => res.DeleteMediaStorePartnerAccountMemberResult);\r\n\t\t}\r\n\r\n\t\tpublic deleteFilesAsync(\r\n\t\t\tids: string[],\r\n\t\t\tpointOfSaleId: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tids: eXpress.serialization.convertPhotoIdToStorageIdWithoutAccountId(ids),\r\n\t\t\t\tpointOfSaleId\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON(this.url + 'DeleteFiles', args);\r\n\t\t}\r\n\r\n\t\tpublic deleteAllFilesInFolderAsync(\r\n\t\t\taccountId: string,\r\n\t\t\tfolderId: string\r\n\t\t): JQueryPromise<{}> {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tfolderId\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{}>(this.url + 'DeleteAllFilesInFolder', args);\r\n\t\t}\r\n\r\n\t\tpublic getFileIdsInFolderAsync(\r\n\t\t\taccountId: string,\r\n\t\t\tfolderId: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tfolderId\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.getJSON<{ GetFileIdsInFolderResult: string[] }>(this.url + 'GetFileIdsInFolder', args)\r\n\t\t\t\t.then(res => res.GetFileIdsInFolderResult);\r\n\t\t}\r\n\r\n\t\tpublic getFolderWithCountAsync(\r\n\t\t\taccountId: string,\r\n\t\t\tfolderId: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tfolderId\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.getJSON<{ GetFolderWithCountResult: eXpress.services.IPhotoFolder }>(this.url + 'GetFolderWithCount', args)\r\n\t\t\t\t.then(res => eXpress.deserialization.photoFolderConvert(res!.GetFolderWithCountResult, this));\r\n\t\t}\r\n\r\n\t\tpublic getTokenExpiry(\r\n\t\t\tstoreCode: core.StoreCode,\r\n\t\t\taccountId: string,\r\n\t\t\tpointOfSaleId: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tmediaStorePartnerType: serialization.convertStoreCodeToStoreType(storeCode)\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{ GetTokenExpiryResult: eXpress.services.TokenExpiry }>(this.url + 'GetTokenExpiry', args)\r\n\t\t\t\t.then(res => eXpress.deserialization.TokenExpiryConvert(res.GetTokenExpiryResult));\r\n\t\t}\r\n\r\n\t\tpublic getPartnerAlbumsAsync(\r\n\t\t\tstoreCode: core.StoreCode,\r\n\t\t\taccountId: string,\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\tpage: number,\r\n\t\t\tpageSize: number,\t\t\t\r\n\t\t\tpageToken: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst storeType = serialization.convertStoreCodeToStoreType(storeCode);\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tmediaStorePartnerType: serialization.convertStoreCodeToStoreType(storeCode),\r\n\t\t\t\tpage,\r\n\t\t\t\tpageSize,\r\n\t\t\t\tpageToken\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{ GetMediaStorePartnerAlbumsResult: eXpress.services.IPhotoFolders }>(this.url + 'GetMediaStorePartnerAlbums', args)\r\n\t\t\t\t.then(res => res && res.GetMediaStorePartnerAlbumsResult.Folders\r\n\t\t\t\t\t.map(f => eXpress.deserialization.partnerFolderConvert(f, res.GetMediaStorePartnerAlbumsResult.StoreType, res.GetMediaStorePartnerAlbumsResult.PageToken, this)));\r\n\t\t}\r\n\r\n\t\tpublic getPartnerPhotosAsync(pointOfSaleId: string,\r\n\t\t\taccountId: string,\r\n\t\t\tstore: StoreType,\r\n\t\t\tfolderCode: string,\r\n\t\t\tselectedIds: string[],\r\n\t\t\tisSelectAllActive = false,\r\n\t\t\tuseDeselected = false\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = { pointOfSaleId, accountId, selectedIds, mediaStorePartnerType: store, folderCode, isSelectAllActive, useDeselected };\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ GetMediaStorePartnerPhotosResult: eXpress.services.IPhotos }>(this.url + \"GetMediaStorePartnerPhotos\", args)\r\n\t\t\t\t.then(res => res && res.GetMediaStorePartnerPhotosResult.Photos\r\n\t\t\t\t\t.map(photo => eXpress.deserialization.partnerPhotoConvert(photo, res.GetMediaStorePartnerPhotosResult.StoreType, res.GetMediaStorePartnerPhotosResult.PageToken)));\r\n\t\t}\r\n\r\n\t\tpublic getPartnerPhotosInFolderAsync(\r\n\t\t\tfolderCode: string,\r\n\t\t\tstoreType: StoreType,\r\n\t\t\taccountId: string,\r\n\t\t\tpointOfSaleId: string,\r\n\t\t\tpage?: number,\r\n\t\t\tpageSize?: number,\r\n\t\t\tpageToken?: string\r\n\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tfolderCode,\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tmediaStorePartnerType: storeType,\r\n\t\t\t\tpage,\r\n\t\t\t\tpageSize,\r\n\t\t\t\tpageToken\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ GetMediaStorePartnerPhotosOfFolderResult: eXpress.services.IPhotos }>(this.url + \"GetMediaStorePartnerPhotosOfFolder\", args)\r\n\t\t\t\t.then(res => res && res.GetMediaStorePartnerPhotosOfFolderResult.Photos\r\n\t\t\t\t\t.map(photo => eXpress.deserialization.partnerPhotoConvert(photo, res.GetMediaStorePartnerPhotosOfFolderResult.StoreType, res.GetMediaStorePartnerPhotosOfFolderResult.PageToken)));\r\n\t\t}\r\n\r\n\t\tpublic renameFolderAsync(\r\n\t\t\taccountId: string,\r\n\t\t\tfolderId: string,\r\n\t\t\tname: string\r\n\t\t): JQueryPromise<{}> {\r\n\t\t\tconst args = {\r\n\t\t\t\tfolderId: {\r\n\t\t\t\t\tId: folderId,\r\n\t\t\t\t\tAccountId: accountId\r\n\t\t\t\t},\r\n\t\t\t\tnewName: name\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{}>(this.url + 'RenameFolder', args);\r\n\t\t}\r\n\r\n\t\tpublic createFolderAsync(\r\n\t\t\taccountId: string,\r\n\t\t\tname: string\r\n\t\t): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tname,\r\n\t\t\t\tdescription: \"\"\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{ CreateFolderResult: services.IPhotoFolder }>(this.url + 'CreateFolder', args)\r\n\t\t\t\t.then(f => eXpress.deserialization.photoFolderConvert(f!.CreateFolderResult, this));\r\n\t\t}\r\n\r\n\t\tpublic deleteFoldersAsync(\r\n\t\t\taccountId: string,\r\n\t\t\tfolderIds: string[]\r\n\t\t): JQueryPromise<{}> {\r\n\t\t\tconst args = {\r\n\t\t\t\tfolderIds: eXpress.serialization.convertPhotoIdToStorageId(folderIds, accountId)\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{}>(this.url + 'DeleteFolders', args);\r\n\t\t}\r\n\r\n\t\tpublic moveFilesAsync(accountId: string, oldFolderId: string, newFolderId: string, ids: string[]): JQueryPromise<{}> {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\toldFolderId,\r\n\t\t\t\tnewFolderId,\r\n\t\t\t\tids: eXpress.serialization.convertPhotoIdToStorageId(ids, accountId)\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{}>(this.url + 'MoveFiles', args);\r\n\t\t}\r\n\r\n\t\tpublic moveAllFilesInFolderAsync(accountId: string, oldFolderId: string, newFolderId: string): JQueryPromise<{}> {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\toldFolderId,\r\n\t\t\t\tnewFolderId\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{}>(this.url + 'MoveAllFilesInFolder', args);\r\n\t\t}\r\n\r\n\t\tpublic rotatePhotosAsync(\r\n\t\t\taccountId: string,\r\n\t\t\trotation: number,\r\n\t\t\t...ids: string[]\r\n\t\t): JQueryPromise<{}> {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tids: eXpress.serialization.convertPhotoIdToStorageId(ids, accountId),\r\n\t\t\t\trotation: ((rotation || 0) + 360) % 360\r\n\t\t\t};\r\n\t\t\treturn ServiceBase.postJSON<{}>(this.url + 'RotatePhotos', args);\r\n\t\t}\r\n\r\n//#region externalPhotoPicker\r\n\t\tpublic createExternalPhotoPicker(storeTypeId: number, accountId: string, pointOfSaleId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tmediaStorePartnerType: storeTypeId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON<{ CreateExternalPhotoPickerResult: ExternalPhotoPicker }>(this.url + 'CreateExternalPhotoPicker', args)\r\n\t\t\t\t.then(res => res.CreateExternalPhotoPickerResult);\r\n\t\t}\r\n\r\n\t\tpublic getExternalPhotoPicker(storeTypeId: number, accountId: string, pointOfSaleId: string, sessionId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tmediaStorePartnerType: storeTypeId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tsessionId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON<{ GetExternalPhotoPickerResult: ExternalPhotoPicker }>(this.url + 'GetExternalPhotoPicker', args)\r\n\t\t\t\t.then(res => res.GetExternalPhotoPickerResult);\r\n\t\t}\r\n\r\n\t\tpublic getExternalPhotoPickerPhotos(storeTypeId: number, accountId: string, pointOfSaleId: string, sessionId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tmediaStorePartnerType: storeTypeId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tsessionId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.getJSON<{ GetExternalPhotoPickerPhotosResult: eXpress.services.IPhotos }>(this.url + \"GetExternalPhotoPickerPhotos\", args)\r\n\t\t\t\t.then(res => res && res.GetExternalPhotoPickerPhotosResult.Photos\r\n\t\t\t\t\t.map(photo => eXpress.deserialization.partnerPhotoConvert(photo, res.GetExternalPhotoPickerPhotosResult.StoreType, res.GetExternalPhotoPickerPhotosResult.PageToken)));\r\n\t\t}\r\n\r\n\t\tpublic deleteExternalPhotoPicker(storeTypeId: number, accountId: string, pointOfSaleId: string, sessionId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tmediaStorePartnerType: storeTypeId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\tsessionId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{}>(this.url + 'DeleteExternalPhotoPicker', args)\r\n\t\t\t\t.then((res: { DeleteExternalPhotoPickerResult: boolean }) => res.DeleteExternalPhotoPickerResult);\r\n\t\t}\r\n\t//#endregion\r\n\t}\r\n\r\n\texport class UploadService extends ServiceBase {\r\n\t\tprotected url: string;\r\n\r\n\t\tconstructor(apiHostUrl: string) {\r\n\t\t\tsuper(apiHostUrl, \"UploadService.svc/json/\");\r\n\t\t}\r\n\r\n\t\tpublic createUploadSessionAsync(pointOfSaleId: string, accountId: string, folderId: string, flow: string, uploadTechnology: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tfolderId,\r\n\t\t\t\tflow,\r\n\t\t\t\tuploadTechnology\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ CreateUploadSessionResult: ICreateUploadSessionResult }>(this.url + 'CreateUploadSession', args)\r\n\t\t\t\t.then(res => res.CreateUploadSessionResult);\r\n\t\t}\r\n\r\n\t\tpublic getUploadFolderForProductCategoryAsync(accountId: string, productCategory: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tproductCategory\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ GetUploadFolderForProductCategoryResult: services.IPhotoFolder }>(this.url + 'GetUploadFolderForProductCategory', args)\r\n\t\t\t\t.then(res => deserialization.photoFolderConvert(res.GetUploadFolderForProductCategoryResult, new StorageService(this.apiHostUrl)));\r\n\t\t}\r\n\r\n\t\tpublic checkImportStatusForSessionAsync(accountId: string, uploadSessionId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\taccountId,\r\n\t\t\t\tuploadSessionId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ CheckImportStatusForSessionResult: ICheckImportStatusResultItem[] }>(this.url + 'CheckImportStatusForSession', args)\r\n\t\t\t\t.then(res => res.CheckImportStatusForSessionResult);\r\n\t\t}\r\n\r\n\t\tpublic checkImportProgressAsync(uploadSessionId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tuploadSessionId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ CheckImportProgressResult: number }>(this.url + \"CheckImportProgress\", args)\r\n\t\t\t\t.then(res => res.CheckImportProgressResult);\r\n\t\t}\r\n\r\n\t\tpublic getPhotosForUploadAsync(pointOfSaleId: string, accountId: string, uploadSessionId: string): JQueryPromise {\r\n\t\t\tconst args = {\r\n\t\t\t\tpointOfSaleId,\r\n\t\t\t\taccountId,\r\n\t\t\t\tuploadSessionId\r\n\t\t\t};\r\n\r\n\t\t\treturn ServiceBase.postJSON<{ GetPhotosForUploadResult: IPhoto[] }>(this.url + 'GetPhotosForUpload', args)\r\n\t\t\t\t.then(res => res.GetPhotosForUploadResult);\r\n\t\t}\r\n\t}\r\n\r\n\texport class Services {\r\n\t\tprotected apiHostUrl: string;\r\n\t\tprotected pointOfSaleId: string;\r\n\t\tprotected language: string;\r\n\t\tpublic selectionPage: SelectionPageService;\r\n\t\tpublic storageService: StorageService;\r\n\t\tpublic uploadService: UploadService;\r\n\r\n\t\tconstructor(deps: IServiceDependencies) {\r\n\t\t\t// Our services expect the apiHostUrl to end with a forward slash.\r\n\t\t\tthis.apiHostUrl = deps.apiHostUrl;\r\n\t\t\tthis.pointOfSaleId = utils.required(deps.pointOfSaleId, \"no pointOfSaleID in AppContext\");\r\n\t\t\tthis.language = utils.required(deps.languageCode, \"no LanguageCode in AppContext\");\r\n\t\t\tthis.selectionPage = new SelectionPageService(this.apiHostUrl);\r\n\t\t\tthis.storageService = new StorageService(this.apiHostUrl);\r\n\t\t\tthis.uploadService = new UploadService(this.apiHostUrl);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nnamespace eXpress.services.bulkeditor {\r\n\texport interface IProduct {\r\n\t\tCode: string;\r\n\t\tAttributes: eXpress.core.KeyValuePair[];\r\n\t\tAttributesDict: eXpress.core.Map;\r\n\t\tOptions: eXpress.core.KeyValuePair[];\r\n\t\tOptionsDict: eXpress.core.Map;\r\n\t}\r\n\r\n\texport interface ISimpleCartItem {\r\n\t\tProducts: ICartItemProduct[];\r\n\t}\r\n\r\n\texport interface ICartItem {\r\n\t\tCreatedForced: string | null;\r\n\t\tDateModifiedParent: string | null;\r\n\t\tDatePictureTaken: string | null;\r\n\t\tFileSize: number;\r\n\t\tId: string;\r\n\t\tManipulations: IManipulations;\r\n\t\tOldFileSystem: boolean;\r\n\t\tOriginalFileName: string;\r\n\t\tOriginalHeight: number;\r\n\t\tOriginalWidth: number;\r\n\t\tPhotoId: string;\r\n\t\tProducts: ICartItemProduct[];\r\n\t\tApplyAllFailed: boolean;\r\n\t\tPhotoCounter: number;\r\n\t\tThumbUrl: string;\r\n\t\tMediumUrl: string;\r\n\t}\r\n\r\n\texport interface ICartItemProduct {\r\n\t\tProductCode: string;\r\n\t\tQuantity: number;\r\n\t\tBorder: string | null;\r\n\t\tColorEffect: string | null;\r\n\t\tPaper: string | null;\r\n\t\tCartItemId: string;\r\n\t}\r\n\r\n\texport interface IManipulations {\r\n\t\tColorEffect: string | null;\r\n\t\tHeight: number;\r\n\t\tLeft: number;\r\n\t\tRotate90: number;\r\n\t\tTop: number;\r\n\t\tWidth: number;\r\n\t}\r\n\r\n\texport interface IBulkEditorGetAllProductsResult {\r\n\t\tProducts: IProduct[];\r\n\t\tTranslations: eXpress.core.KeyValuePair[];\r\n\t\tBulkSequenceShapes: string[];\r\n\t}\r\n}\r\n\r\nnamespace eXpress.core.bulkeditor {\r\n\texport enum WhiteBorderType {\r\n\t\tNone = 0,\r\n\t\tNormal3mm = 1,\r\n\t\tRetro = 2\r\n\t}\r\n\r\n\texport function fillOneItemUrl(item: CartItem, ecomApiUrl: string, whiteBorderType = WhiteBorderType.None, forCropping = false, doClippingAndRotationOnClient = true, size = 0): string {\r\n\t\tlet url = `${ecomApiUrl}/mediastore/accounts/${GetCookie(\"accid\")}/photos/${item.photoId}/transforms?streamName=medium`;\r\n\r\n\t\tif (size > 0)\r\n\t\t\turl += '&size=' + size;\r\n\r\n\t\tif (!forCropping && !doClippingAndRotationOnClient && whiteBorderType === WhiteBorderType.Normal3mm)\r\n\t\t\turl += '&wbm=15,15,15,15';\r\n\t\telse if (!forCropping && !doClippingAndRotationOnClient && whiteBorderType === WhiteBorderType.Retro)\r\n\t\t\turl += '&wbm=15,15,60,15';\r\n\t\tif (!forCropping && !doClippingAndRotationOnClient)\r\n\t\t\turl += '&crop=' + item.manipulations.left + ',' + item.manipulations.top + ',' + item.manipulations.width + ',' + item.manipulations.height;\r\n\t\tif (item.manipulations.colorEffect)\r\n\t\t\turl += '&ce=' + item.manipulations.colorEffect;\r\n\t\tif (!doClippingAndRotationOnClient)\r\n\t\t\turl += '&rot90=' + item.manipulations.rotate90;\r\n\r\n\t\turl += '&upd=' + item.dateModifiedParent.getTime();\r\n\r\n\t\treturn url;\r\n\t}\r\n}\r\n"],"names":["eXpress","historyJs","history","window","onunload","onbeforeunload","$","ajaxPrefilter","opts","originalOpts","jqXHR","undefined","retryCount","dfd","Deferred","done","resolve","fail","args","_i","arguments","length","_a","status","getAllResponseHeaders","newOpts","extend","ajax","then","reject","rejectWith","promise","pushState","bind","HideLoadingDialog","core","StoreType","emptyGuid","LoginManager","accountService","this","timer","prototype","start","accountType","_this","startingAccId","GetCookie","setInterval","run","stop","clearTimeout","currentAccountId","alertUser","checkAccountValidityAsync","res","key","hasClass","CloseResponsiveDialog","ShowContentDialog","label","okContentKey","cssClass","dialogId","okFunction","unbind","location","reload","KeyValuePair","CustomHtmlElementsApp","isInDiv","controlHasFocus","isMobile","innerWidth","innerHeight","addHandlers","resize","on","document","e","closeAllDropdowns","stopBubble","$target","currentTarget","$list","closest","children","toggleClass","toggle","css","prop","hide","show","event","closeFilters","preventDefault","stopPropagation","removeClass","SortOrder","PhotoSortBy","DropdownElements","_super","__extends","Photo","id","name","dateTaken","dateModified","dateUploaded","description","fileSize","folderId","height","mediumUrl","originalFileName","thumbUrl","width","rotate90","relativeMediumUrl","hash","fileId","code","originalFilename","mediumUrlOriginal","setMediumUrl","rotate90Cw","BaseStore","username","isConnected","storeType","storageService","showAlbum","showTokenExpiry","hasAlbumAccess","partnerLogoSvgUrl","locatePhotosUrl","importPhotosUrl","useExternalPhotoPicker","connectedUserName","services","page","pageSize","pageToken","ExpressStore","call","connectToAsync","getFoldersAsync","getFolderListWithThumbAsync","context","pointOfSaleId","getTokenExpiry","Error","BaseFolder","clone","SmartphotoFolder","fileCount","dateCreated","Rotate90","UpdateShoppingCartAction","getPhotosAsync","sortBy","sortOrder","DateTaken","Ascending","getPhotosByFolderAsync","getPhotosByIdsAsync","ids","useDeselected","isSelectAllActive","getAllFileIdsAsync","getFileIdsInFolderAsync","mediastore","PhotoReference","Manipulations","itemGetOrientation","item","manipulations","temp","bulkeditor","CartItem","cartItem","originalWidth","originalHeight","platforms","BasePlatform","setTimeout","delayInMs","callback","dispose","generateNewGuid","buf","S4","crypto","msCrypto","getRandomValues","Uint16Array","num","ret","toString","replace","c","r","Math","random","base","partners","PartnerStore","getPartnerAlbumsAsync","PartnerFolder","getPartnerPhotosInFolderAsync","photos","concat","map","photo","PartnerPhoto","hiresUrl","downloadUrl","serialization","manipulationsConvert","ColorEffect","colorEffect","Height","Left","left","Top","top","Width","cartItemProductConvert","apiObject","Border","border","Paper","paper","ProductCode","productCode","Quantity","quantity","CartItemId","cartItemId","convertPhotoIdToStorageIdWithoutAccountId","photoStorageIds","photoId","Id","convertPhotoIdToStorageId","accountId","AccountId","convertStoreCodeToStoreType","OrderQuantityConvert","CrossSellFrom","crossSellFrom","Pvc","pvc","cartItemConvert","ApplyAllFailed","applyAllFailed","CreatedForced","createdForced","utils","formatWcfJsonDate","DateModifiedParent","dateModifiedParent","DatePictureTaken","datePictureTaken","FileSize","OldFileSystem","oldFileSystem","OriginalFileName","OriginalHeight","OriginalWidth","PhotoCounter","photoCounter","PhotoId","Products","products","p","ThumbUrl","MediumUrl","simpleCartItemConvert","productConvert","attributes","Attributes","attributesDict","AttributesDict","Code","options","Options","optionsDict","OptionsDict","deserialization","designAlternativeColorConvert","obj","color","Color","designVariant","DesignVariant","designVariantConvert","predefinedProductName","PredefinedProductName","designVariantName","DesignVariantName","icon","Icon","iconColorCode","IconColorCode","designProductConvert","Name","shortName","ShortName","designVariantInListDSP","DesignVariantInListDSP","designVariantInOpenDSP","DesignVariantInOpenDSP","designProductAlternativesGroupConvert","inCreator","InCreator","inListDSP","InListDSP","inOpenDsp","InOpenDSP","productAlternatives","ProductAlternatives","pa","designProductAlternativeConvert","title","Title","designProductCategoryConvert","showMeasurements","ShowMeasurements","designWillBeLost","DesignWillBeLost","iconOverlayColorCode","IconOverlayColorCode","orientation","Orientation","productCategoryCode","ProductCategoryCode","productVariantCode","ProductVariantCode","designAttributeDetailsValueConvert","default","Default","quantityBreakPriceDetails","QuantityBreakPriceDetails","designAttributeDetailsConvert","values","Values","v","designQuantityBreakPriceDetailsConvert","defaultQuantityBreaks","DefaultQuantityBreaks","quantityBreaks","QuantityBreaks","qb","designQuantityBreakConvert","break","Break","price","Price","designProductOptionGroupConvert","inDsp","InDsp","inOptionPage","InOptionPage","Description","productOptions","ProductOptions","po","designProductOptionConvert","siblingDataOptionUSPs","SiblingDataOptionUSPs","siblingDataPageTitle","SiblingDataPageTitle","specification","Specification","alternativeOptionGroup","AlternativeOptionGroup","varPrice","VarPrice","dspOverlayUrl","DspOverlayUrl","openDspOverlayUrl","OpenDspOverlayUrl","defaultProductOption","DefaultProductOption","varAmount","VarAmount","designConvert","alternativeColors","AlternativeColors","ac","displayPrice","DisplayPrice","displayPricePerUnit","DisplayPricePerUnit","showStar","ShowStar","dspName","DspName","new","New","packshotUrl","PackshotUrl","product","Product","productAlternativesGroups","ProductAlternativesGroups","pag","productCategory","ProductCategory","productCategoryGroupCode","ProductCategoryGroupCode","productCategoryGroups","ProductCategoryGroups","temporaryUnavailable","TemporaryUnavailable","productVariantName","ProductVariantName","dimensions","Dimensions","canSwitchBackgroundInCreator","CanSwitchBackgroundInCreator","hasSets","HasSets","supportsPersonalData","SupportsPersonalData","debug","Debug","cartItemDataConvert","getDesignsResultConvert","designCount","DesignCount","designFilterCount","DesignFilterCount","designs","Designs","d","designConstellationConvert","constellationName","ConstellationName","productName","ProductName","designDetailConvert","attributeDetails","AttributeDetails","disableOverlays","DisableOverlays","editorStartLink","EditorStartLink","productOptionGroups","ProductOptionGroups","pog","productPreviewImageCount","ProductPreviewImageCount","productPreviewImageUrls","ProductPreviewImageUrls","shipmentDetails","ShipmentDetails","usps","USPs","variablePriceDetails","VariablePriceDetails","promotionDetails","PromotionDetails","occasionPackShot","OccasionPackShot","purposePackShot","PurposePackShot","productDimensions","ProductDimensions","photoFolderConvert","folder","angle","ThumbUrlRotation90","angleRotate90","coreFolder","FileCount","deserialiseDate","DateCreated","partnerFolderConvert","photoConvert","DateModified","DateUploaded","FolderId","OriginalFilename","RelativeMediumUrl","Hash","partnerPhotoConvert","HiresUrl","DownloadUrl","photoStoreConvert","ConnectedUserName","IsConnected","ShowAlbum","HasAlbumAccess","PartnerLogoSvgUrl","LocatePhotosUrl","ImportPhotosUrl","UseExternalPhotoPicker","ShowTokenExpiry","BulkEditorGetAllProductsResultConvert","translations","Translations","bulkSequenceShapes","BulkSequenceShapes","TokenExpiryConvert","tokenexpiry","countdownVisibleNumber","CountDownBarVisibleMinutes","tokenExpiryDate","TokenExpiryDate","UpdateShoppingCartResultConvert","action","Action","cartItemIds","CartItemIds","redirectUrl","RedirectUrl","totalPrice","TotalPrice","UpdateCartItemQuantityResultConvert","success","Success","showLoadingDialogAsync","timeout","ShowLoadingDialog","blockingEventDisposables","html","disableUserEvents","always","showLoadingDialogPromiseAsync","finally","Helpers","Object","defineProperty","get","allowMobile","isMobileField","mobileTransitionScreenWidth","helpers","isUndefined","findFirst","arr","predicate","result","some","el","i","findIndex","index","getFormattedDate","date","year","getFullYear","month","getMonth","day","getDate","getDaysInMonth","m","y","required","arg","message","postAfterLinkClick","url","data","form","createElement","setAttribute","forEach","kv","hiddenField","Key","Value","appendChild","body","submit","waitAsync","resolveWith","deferred","waitAsyncTimeout","isNonEmptyArray","Array","isArray","changeUrlAndLog","tabName","tabValue","skipChangeUrl","href","updateParameter","replaceState","addCurrency","addStar","display","displayCurrencyLeft","currencySymbol","toFixed","decimalSeparator","calculateCrop","cropRatio","longestSide","shortestSide","cropLongestSide","cropShortestSide","round","x","cloneObj","constructor","attribute","findFirstOrError","removeItem","splice","parseWcfJsonDate","s","dateRegexResult","exec","Date","parseFloat","getTime","convertDateToUtcDate","UTC","getHours","getMinutes","getSeconds","getDDMMYYYYDateWithHyphens","dateParts","split","formatString","dateString","RegExp","test","substr","indexOf","parseJsonDate","jsonDate","dateTimePart","minusSignIndex","plusSignIndex","signIndex","ms","offsetHours","datePart","substring","offsetPart","offset","utcTime","getTimezoneOffset","validateDateParts","convertKeyValuePairToMap","raw","dict","getHeaderHeight","headerHeight","each","makeCssClass","toLowerCase","getQueryString","pos","getQueryStringParameters","params","pairs_1","value","getQueryStringParameter","queryStringParam","arrayToQuerystring","array","preventInvalidInput","textbox","regex","extraValidation","keyCode","which","newValue","String","fromCharCode","selectionStart","selectionEnd","val","animate","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","returnValue","DetectLast","execAsync","_lastId","_execAsync","isLastRequested","cancel","getLastId","formatted","regexp","isNumericValue","reduceFontsizeToFit","itemEl","minFontsize","element","fontSize","parseInt","getComputedStyle","j","scrollHeight","clientHeight","scrollWidth","clientWidth","style","Element","matches","msMatchesSelector","webkitMatchesSelector","closestPolyfill","ancestor","documentElement","contains","parentElement","insertAdjacentElement","position","elem","toUpperCase","parentNode","insertBefore","firstChild","nextSibling","includes","searchElement","fromIndex","TypeError","o","len","n","k","max","abs","Document","DocumentFragment","hasOwnProperty","configurable","enumerable","writable","append","docFrag","createDocumentFragment","argItem","isNode","Node","createTextNode","DesignFilterCountName","FolderSortField","ImportStatus","OptionInDsp","DSPType","TokenExpiry","DownloadService","apiHostUrl","productCategoryGroup","createDownloadSessionForPartnerPhotosAsync","partnerPhotoData","language","flow","languageISO","requestList","pd","__assign","ImageUrl","GooglePhotos","ServiceBase","postJSON","downloadPartnerCheckStatusFilesAsync","fileIdsToCheck","fileIds","CheckDownloadStatusResult","SelectionPageService","getDesignsAsync","mainProductCategoryGroupCode","occasion","purpose","predefinedProductCategory","searchColor","imageCount","pageNumber","optionGroup","ownDesign","sortMethod","designGroup","gender","showDebug","preselectOccasion","getJSON","getProductCategories","productCategories","tagValues","theme","getDesign","getDesignDetail","getConstellationsAsync","GetDesignFilterCount","designFilterCountName","productCodes","predefinedProductCategories","searchColors","imageCounts","prices","getQuantityBreakOnlyByMaASync","StorageService","getPhotoStoresAsync","skipIsConnectedCheck","skipPhotoDownload","skipSignleSignOn","maxNumberOfRetries","retry","GetPhotoStoresResult","store","sortField","Descending","GetFolderListWithThumbResult","readOnly","GetPhotosByFolderResult","GetExpressPhotosResult","getPhotosByFoldersAsync","folderIds","limit","GetPhotosByFoldersResult","deleteMediaStorePartnerAccountMemberAsync","storeCode","mediaStorePartnerType","DeleteMediaStorePartnerAccountMemberResult","deleteFilesAsync","deleteAllFilesInFolderAsync","GetFileIdsInFolderResult","getFolderWithCountAsync","GetFolderWithCountResult","GetTokenExpiryResult","GetMediaStorePartnerAlbumsResult","Folders","f","PageToken","getPartnerPhotosAsync","folderCode","selectedIds","GetMediaStorePartnerPhotosResult","Photos","GetMediaStorePartnerPhotosOfFolderResult","renameFolderAsync","newName","createFolderAsync","CreateFolderResult","deleteFoldersAsync","moveFilesAsync","oldFolderId","newFolderId","moveAllFilesInFolderAsync","rotatePhotosAsync","rotation","createExternalPhotoPicker","storeTypeId","CreateExternalPhotoPickerResult","getExternalPhotoPicker","sessionId","GetExternalPhotoPickerResult","getExternalPhotoPickerPhotos","GetExternalPhotoPickerPhotosResult","deleteExternalPhotoPicker","DeleteExternalPhotoPickerResult","UploadService","createUploadSessionAsync","uploadTechnology","CreateUploadSessionResult","getUploadFolderForProductCategoryAsync","GetUploadFolderForProductCategoryResult","checkImportStatusForSessionAsync","uploadSessionId","CheckImportStatusForSessionResult","checkImportProgressAsync","CheckImportProgressResult","getPhotosForUploadAsync","GetPhotosForUploadResult","Services","deps","languageCode","selectionPage","uploadService","WhiteBorderType","fillOneItemUrl","ecomApiUrl","whiteBorderType","forCropping","doClippingAndRotationOnClient","size","None","Normal3mm","Retro"],"mappings":"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"}