@wizishop/img-manager 0.2.79 → 0.2.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +1 -1
- package/assets/i18n/fr.json +1 -1
- package/bundles/wizishop-img-manager.umd.js +52 -12
- package/bundles/wizishop-img-manager.umd.js.map +1 -1
- package/bundles/wizishop-img-manager.umd.min.js +2 -2
- package/bundles/wizishop-img-manager.umd.min.js.map +1 -1
- package/esm2015/lib/components/images-view/images-view.component.js +11 -3
- package/esm2015/lib/components/images-view/mosaic-view/img-card/img-card.component.js +10 -2
- package/esm2015/lib/components/images-view/mosaic-view/mosaic-view.component.js +11 -3
- package/esm2015/lib/components/img-tabs/img-tabs.component.js +19 -5
- package/esm2015/lib/wz-img-manager.component.js +5 -2
- package/esm5/lib/components/images-view/images-view.component.js +11 -3
- package/esm5/lib/components/images-view/mosaic-view/img-card/img-card.component.js +10 -2
- package/esm5/lib/components/images-view/mosaic-view/mosaic-view.component.js +11 -3
- package/esm5/lib/components/img-tabs/img-tabs.component.js +19 -5
- package/esm5/lib/wz-img-manager.component.js +5 -2
- package/fesm2015/wizishop-img-manager.js +49 -8
- package/fesm2015/wizishop-img-manager.js.map +1 -1
- package/fesm5/wizishop-img-manager.js +49 -8
- package/fesm5/wizishop-img-manager.js.map +1 -1
- package/lib/components/images-view/images-view.component.d.ts +3 -1
- package/lib/components/images-view/mosaic-view/img-card/img-card.component.d.ts +2 -0
- package/lib/components/images-view/mosaic-view/mosaic-view.component.d.ts +3 -1
- package/lib/components/img-tabs/img-tabs.component.d.ts +6 -1
- package/lib/wz-img-manager.component.d.ts +1 -0
- package/package.json +1 -1
- package/wizishop-img-manager-0.2.83.tgz +0 -0
- package/wizishop-img-manager.metadata.json +1 -1
- package/wz-img-manager.scss +164 -3
- package/wizishop-img-manager-0.2.79.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@wizishop/img-manager/lib/services/img-selection.service.ts","ng://@wizishop/img-manager/lib/dto/config/external/external-config.dto.ts","ng://@wizishop/img-manager/lib/services/img-manager.service.ts","ng://@wizishop/img-manager/lib/services/config/img-cdn.service.ts","ng://@wizishop/img-manager/lib/services/config/external-config.service.ts","ng://@wizishop/img-manager/lib/services/user-settings.service.ts","ng://@wizishop/img-manager/lib/services/canva.service.ts","ng://@wizishop/img-manager/lib/services/img-event.service.ts","ng://@wizishop/img-manager/lib/services/dom.service.ts","ng://@wizishop/img-manager/lib/wz-img-manager.component.ts","ng://@wizishop/img-manager/lib/animations/easeInOut/ease-in-out.animation.ts","ng://@wizishop/img-manager/lib/services/alert.service.ts","ng://@wizishop/img-manager/lib/components/img-upload/img-upload.component.ts","ng://@wizishop/img-manager/lib/services/rename-picture.service.ts","ng://@wizishop/img-manager/lib/components/upload-list/upload-list.component.ts","ng://@wizishop/img-manager/lib/components/img-tabs/img-tabs.component.ts","ng://@wizishop/img-manager/lib/directives/drag-drop.directive.ts","ng://@wizishop/img-manager/lib/services/pexels.service.ts","ng://@wizishop/img-manager/lib/animations/listAnnimation/list.animation.ts","ng://@wizishop/img-manager/lib/components/pexels-lib/pexels-lib.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-actions-handler.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/img-card/img-card.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/img-editor.component.ts","ng://@wizishop/img-manager/lib/components/canva-btn/canva-btn.component.ts","ng://@wizishop/img-manager/lib/components/img-selection/img-selection.component.ts","ng://@wizishop/img-manager/lib/directives/loading.directive.ts","ng://@wizishop/img-manager/lib/directives/auto-hide.directive.ts","ng://@wizishop/img-manager/lib/directives/copy-to-clipboard.directive.ts","ng://@wizishop/img-manager/lib/components/shared/dropdown/dropdown.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/info-section/info-section.component.ts","ng://@wizishop/img-manager/lib/animations/insertRemove/insert-remove.animation.ts","ng://@wizishop/img-manager/lib/components/img-editor/cropper/cropper.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/mosaic-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/table-view/table-view.component.ts","ng://@wizishop/img-manager/lib/services/table/filters-table.service.ts","ng://@wizishop/img-manager/lib/components/shared/table/table.component.ts","ng://@wizishop/img-manager/lib/components/shared/input-search/input-search.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/total-pages/is-last-page.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/pagination.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/array-total-pages/array-pages.pipe.ts","ng://@wizishop/img-manager/lib/pipes/pagination/text/custom-text.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/checkbox/checkbox.component.ts","ng://@wizishop/img-manager/lib/directives/table/checkBoxRow.directive.ts","ng://@wizishop/img-manager/lib/directives/table/column.directive.ts","ng://@wizishop/img-manager/lib/directives/table/columnHeader.directive.ts","ng://@wizishop/img-manager/lib/directives/table/raw.directive.ts","ng://@wizishop/img-manager/lib/pipes/images/img-src.pipe.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/abstract-debounce.directive.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/debounce-keyup.directive.ts","ng://@wizishop/img-manager/lib/components/loader/loader.component.ts","ng://@wizishop/img-manager/lib/components/shared/alert/alert.component.ts","ng://@wizishop/img-manager/lib/pipes/number-to-array.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/page-selector/page-selector.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/large-number-of-page/large-number-of-page.pipe.ts","ng://@wizishop/img-manager/lib/wz-img-manager.module.ts","ng://@wizishop/img-manager/lib/dto/canva.dto.ts","ng://@wizishop/img-manager/lib/dto/config/apis/api.dto.ts","ng://@wizishop/img-manager/lib/dto/config/image-cdn/image-cdn-config.dto.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","e","ar","push","error","__spread","concat","ImgSelectionService","imgSelectedList","multipleImgMode","imgSelectionSubscriber","imgListLoading","ReplaySubject","getImgSelection","setImgSelection","_this","forEach","elem","emitImgSelectionChange","addImgSelected","picture","getImgSelectionChange","Observable","subscriber","map","obs","JSON","parse","stringify","removeImgSelectedByIndex","index","splice","removeImgSelectedById","id_file","_b","_c","removeImgSelectionByIds","id_file_list","indexOf","removeAllImgSelected","setMultipleImgMode","activated","initImgSelectedList","emitImgListLoading","loading","getImgListLoadingEventListner","asObservable","moveImgOrder","event","fromIndex","previousIndex","toIndex","currentIndex","Injectable","providedIn","ImgManagerService","http","params","HttpParams","set","pageFicheProductConfig","stateDisplayed","showImgManagerModule","showSelection","displayBtn","pageficheProduct","wiziblockConfig","simpleWithButtonOpenerConfig","fullWindowConfig","setApiConfig","img_manager_route","shop_token","imgManagerRoute","shopToken","getOptionsHeaders","header","headers","HttpHeaders","Authorization","getParams","getShopImgList","get","getShopTotalImgList","getShopImg","idFile","param","uploadFile","formData","post","uploadFileByUrl","url","fileName","replaceImg","imageBase64","body","type","put","changeImgName","removeImg","delete","removeMultipleImg","id_array","getImgManagerDisplayConfig","displayName","getAllImgManagerDisplayConfig","HttpClient","ImgCDNService","imgCDNConfig","setImgCDNConfig","getUrlImg","size","urlProperty","keys","filter","RegExp","test","getAllSize","match","ImgManagerConfigService","imgManagerService","imgCDNService","setExternalConfig","externalConfig","api","image_manager_route","getCanvaApiURL","canva_url","getCanvaApiToken","canva_token","getRouteAssets","assets_route","getPexelsApiURL","pexels_route","getPexelsApiToken","pexels_token","getShopCategory","shop_category","UserSettingsService","userdisplayPreference","setUserDisplayPreference","localStorage","setItem","getUserDisplayPreference","getItem","CanvaService","externalConfigService","bindExpectedImgSizeEvent","BehaviorSubject","bindExpectedSizeDone","setCanvaApiConfig","canvaApiURL","canvaApiKey","getCanvaLogo","bindEventExepectedImgSizeChange","expectedImgSizesChange","mediaDTO","getCanvaApi","observer","loadCanva","subscribe","complete","canvaApi","Canva","DesignButton","initializeCanva","initialize","apiKey","then","loadCanvaScript","node","document","createElement","src","async","charset","onload","getElementsByTagName","appendChild","ImgEventService","imgToEditEvent","Subject","imgRemoved","imgAdded","listDisplayedChange","emitImgRemoved","getImgRemovedEventListner","emitImgToEdit","imgToEdit","getImgToEditEventListner","emitImgAdded","getImgAddedEventListner","emitlistDisplayedChange","getlistDisplayedChange","DomService","documentEventSource","documentEventDone","documentScrollSource","documentScrollDone","documentEvent","setDocumentEventListener","addEventListener","documentScroll","setScrollEventListener","window","onscroll","WzImgManagerComponent","imgSelectionService","userSettingsService","canvaService","imgEventService","domService","imgManagerClosed","EventEmitter","_multipleImgMode","_showImgManagerModule","close","listDisplayed","hideTab","activate","displaySmall","onKeydownHandler","onClose","ngOnInit","selectImgEvent","imgSlection","checkCloseImgManager","checkUserDisplayPreference","listDisplayedEvent","setCurrentTab","setTimeout","addBodyBottomPaddingForModule","openSmall","setBodyMainScroll","openFull","hideBodyMainScroll","removeBodyBottomPaddingForModule","emit","onImgManagerClosed","html","overflowHTML","style","overflowY","bodyPadding","parseInt","paddingBottom","ngOnDestroy","unsubscribe","Input","ImgManagerConfigDto","Output","HostListener","KeyboardEvent","Component","selector","template","easeInOut","trigger","state","opacity","transition","animate","AlertService","nwbAlertService","translateService","actionMsg","alertConfig","message","duration","openAlert","msgKey","closePreviousAlert","trans","setAlertColor","alertRefComponent","open","afterClosed","openAlertWithBackendRespons","msgBackend","dismiss","isErrorMsg","color","NwbAlertService","TranslateService","ImgUploadComponent","imgManager","alertService","files","isLoading","imgUploaded","loadingText","errorUploadingImg","errorNotImg","assetsIcon","getAssets","filesChangeByClick","filesChangeByDragAndDrop","filesList","removeDragAndDropStyle","imgToUploadList","files_1","files_1_1","file","FormData","append","name","isFileImage","forkJoin","img","onImgUpload","fileType","split","dragAndDropBox","nativeElement","ViewChild","ElementRef","animations","RenamePictureService","picturesList","pictureNameChanged","errorRenameImg","msgSavingImgName","msgImgNameSaved","setEvents","setPicturesList","onRenamePicture","pictureRenamed","pipe","debounceTime","pictureNameUpdate","renamePicture","getPictureById","id","display_name","data","previousName","UploadListComponent","renamePictureService","onImgUploaded","onToggleSelectImg","selected","imgSelectionChange","imgSelection","idFileList","ImgTabsComponent","imgEventEditService","currentTab","tabActive","tabs","editTab","imgUpload","snackBarNewVersionConfig","toggleTabs","imgUploadedComponent","onEditClosed","onShowImgUploaded","DragDropDirective","onFileDropped","background","onDragOver","evt","preventDefault","stopPropagation","onDragLeave","ondrop","dataTransfer","HostBinding","Directive","PexelsService","languages","fr","en","it","es","setLang","currentLang","onLangChange","langData","lang","searchOnPexels","toSearch","perPage","page","apiBaseUrl","request","httpOptions","shopCategory","listAnnimation","query","transform","stagger","optional","PexelLibComponent","wzImgLibService","searchValue","disableSearch","showImgUploaded","searchUpdated","nbResult","currentPage","initComponent","photosColumns","nbColumuns","responsiveColumns","outerElement","uploadingImg","untitled","successUploadPhoto","errorUploadPhoto","errorRetrievePhotos","subs","control","ngAfterViewInit","oldSearchValue","setNbColumnsToDisplayPhoto","setPhotosColumns","search","width","offsetWidth","onSearchNameChanged","onSearchChange","onBottomReached","scrollHandler","resetSearch","searchSub","wzImgLibDto","total_results","photos","photo","bestColumnIndex","getBestColumn","height","lastPic","querySelector","medium","indexColumn","bestColumn","photosColumn","uploadPhoto","uploading","uploadSub","instant","uploaded","code","sub","ImagesActionHandler","imgEventCardService","externalService","picturesListChange","tableFilters","sort","undefined","order","totalItems","itemsPerPage","displayPexelsResults","disable","disableChange","filtersChange","pictureNameChange","errorRemoveImg","errorAlreadyUsedImg","fakeImgRoute","onToggleAllCheckBoxRow","delSelected","_pictureListeChange","onToggleDelSelection","onFiltersChange","onEdit","onRemoveImg","deleted","msg","status","onPictureNotLoading","onDownloadImg","file_name","getRAWImgRoute","responseType","val","URL","createObjectURL","downloadUrl","revokeObjectURL","onNameChange","a","href","download","click","ngDestroy","getDataAPISub","ImgCardComponent","_super","focusInput","toggleImgSelected","isUploadSection","activeConfirmDelete","tabDisplayed","onToggleImgSelected","ImgEditorComponent","editClosed","isImgModified","isNameModified","currentCroppedImage","msgFailSave","msgFailLoad","msgSuccessEdit","onSave","obsReplaceImg","obsChangeImgName","ranameAndReplaceImg","onRestartEdit","onCancel","onImgCropped","imgBase64","res1","res2","CanvaBtnComponent","wzImgEventService","renderer","imgLoading","availableFormat","ImgManager.CanvaBtn.smallSquare","ImgManager.CanvaBtn.mediumSquare","ImgManager.CanvaBtn.bigSquare","openDropDownMenu","errorUploadCanvaImg","errorRenameCanvaImg","canvaLogoRouteAssets","listenCanvaExpectedSize","subExpectedImgSizesChange","expectedWidth","image_width","expectedHeight","image_height","onOpenCanva","subCanvaApi","addOverflowBody","createDesign","dimensions","units","publishLabel","design","onDesignPublish","_a","exportUrl","designTitle","designPublished","onDesignClose","removeOverflowBody","subUploadImg","addClass","removeClass","Renderer2","ImgSelectionComponent","removingAll","cancellingAll","importingAll","dragStart","trashPositionIndex","trashPositionLeft","getImgSelected","init","drop","removeImgFromSelection","LoadingDirective","el","currentLoading","interval","element","launchLoading","setInterval","Math","floor","random","clearInterval","AutoHideDirective","_elementRef","forceOn","clickOutside","targetElement","clickedInside","contains","classNameFromElement","getAttribute","includes","triggerElement","needToClose_1","v","CopyClipboardDirective","copied","onClick","payload","listener","clipboardData","setData","toString","execCommand","removeEventListener","MouseEvent","DropdownComponent","EditorInfoSectionComponent","_isNameModified","isNameModifiedChange","msgCopyToClipBoard","imgName","getFileSize","round","copyToClipBoard","insertRemove","CropperComponent","_isImgModified","isImgModifiedChange","currentCroppedImageChange","isCropperReady","isCropped","isImgCropped","isImgCroppedInitilized","imageChangedEvent","croppedImage","canvasRotation","rotation","scale","showCropper","containWithinAspectRatio","resolutionConfig","label","config","maintainAspectRatio","active","aspectRatio","rotationConfig","icon","method","zoomConfig","imgCropperConfig","restartEdit","imgRoute","imgType","getImgType","setDefautAspectRatio","pop","raw_height","raw_width","defaultAspectRatio","onRestart","resetConfCropper","onImgModified","fileChangeEvent","imageCropped","detectImgCropperChange","base64","imageLoaded","cropperReady","loadImageFailed","changeResolutionSize","setActiveItem","setCropperProperties","confirmCrop","array","item","indexItem","property","rotateLeft","flipAfterRotate","rotateRight","flipHorizontal","flipH","flipVertical","flipV","flippedH","flippedV","zoomOut","zoomIn","applyMethod","ImagesViewComponent","widthLargeCard","widthSmallCard","nbFakeImg","imgFullWidthConfig","max","largeImgWidthFactor","smallImgWidthFactor","imgWidthConfig","searchQueryChanged","filtersChanged","savePictureList","nbImgToDelSelected","isTotalRetieved","delListImgLoader","failLoaded","confirmImgSup","pageIndex","pageSize","pageSizeOptions","errorGetAllImg","errorGetTotalImg","errorGetImg","msgNoImgFound","maxLengthCardShow","reducePictureListMaxLength","setNbImgToDisplay","_getImgList","getImgList","onSwitchFormatDisplayed","onImgSelected","setNbImgToDelSelected","searchText","searchedValue","removeListImg","idImgToRemove","selectImgChosen","picturesListSelected","displayConfirmImgSup","cancelSup","onPicturesListChange","containerWidth","imgLibContainer","scrollWidth","innerWidth","getImgWidthFactors","maxImgWidthFactor","minImgWidthFactor","minImgWidth","maxImgWidth","ceil","nbMaxImgPerLine","nbMinImgPerLine","getTotalImgPerPage","screenWidth","minWidth","imgSizesConfig","currentImgWidthConfig","fullSize","currentImgWidthConfig_1","currentImgWidthConfig_1_1","widthConfig","total","setParams","limit","initVariables","loadingSuccess","selectImgSelected","idImgSlectedList","displayPexelsLib","calculNbImgFake","nbImgDisplayed","nbImgPerLine","getImg","take","imgAlreadyExist","unshift","imgRemovedEvent","imgAddedEvent","refreshTotalImgList","totalRecords","previousSearchValue","MosaicViewComponent","onCardRenamePicture","TableViewComponent","dataTableName","FiltersTableService","filterRoutingBuilder","filterGroups","Map","dataTableFilters","sortSubject","getTableFilterGroup","has","filterGroup","group","emitSortChange","sortName","getSortChangeListner","setPaginationFilters","setValues","setInitialPaginationFiltersIfNotExist","NwbFilterRoutingBuilder","TableComponent","filtersTableService","tableFiltersChange","placeholder","checkbox","toggleAllCheckBox","disablePagniation","headerCheckBoxId","uuid","tableRoutingName","_filterGroup","valuesChange$","setTablesFilters","filterGroupChangeSub","filters","onToggleAllCheckBox","checked","searchChange","pageChange","encapsulation","ViewEncapsulation","None","InputSearchComponent","smallPadding","innerValue","changeDebounced","onTouchedCallback","onChangeCallback","writeValue","registerOnChange","fn","registerOnTouched","handleDebouncedKeyUp","InputSearchComponent_1","providers","provide","NG_VALUE_ACCESSOR","useExisting","multi","PagniationIsLastPage","Error","Pipe","PaginationComponent","_pagination","pagination","decrementPage","incrementPage","onGotoPageChange","pageNumber","PagniationArrayTotalPages","arrayLength","Number","x","PagniationText","currentItemsLow","currentItemsHigh","low","high","CheckboxComponent","alone","disabled","_onChange","_onTouched","setDisabledState","isDisabled","obj","onChange","CheckboxComponent_1","CheckBoxRow","currentRow","appRef","resolver","injector","checkBoxValueChange","_value","checkboxComponentRef","setCheckBoxValue","createCheckBoxComponent","handleChecboxInputs","handleCheckboxOutputs","checkBoxContainer","className","insertBefore","firstChild","htmlContainer","HtmlContainer","attach","instance","checkBoxId","checkBoxName","checkBoxValue","_toggleCheckbox","dispose","ApplicationRef","Inject","args","DOCUMENT","ComponentFactoryResolver","Injector","hostElement","componentFactoryResolver","attached","component","componentRef","resolveComponentFactory","attachView","hostView","disposeFn","detachView","destroy","rootNodes","TableColumn","currentCell","centerCellValue","applyCustomStylesOnCell","flexGrow","columnSize","centerCell","TableColumnHeader","_headerName","filterRouting","onSortChange","subscriptions","setHeaderName","tableName","handleSortRouting","handleSortBasic","renderHeaderColumn","filterSort","resetSortIcon","sortChangeSub","contentHeader","replace","getCurrentSortIcon","createHeaderContent","handleSort","innerHTML","headerName","getInitialSortIcon","listen","newIcon","newSort","newOrder","currentIcon","emitEvents","initialSortIcon","exec","groups","subscription","TableRow","ImageSrcPipe","pictureName","route","AbstractDebounceDirective","onEventChange","emitEvent$","subscription$","takeUntil","distinctUntilChanged","tap","emitChange","DebounceKeyupDirective","onKeyUp","LoaderComponent","small","AlertComponent","warning","success","iconClass","NumberToArray","number","from","repeat","PageSelectorComponent","openAbsoluteSelect","largeNumberOfPage","numberOfPage","_totalItems","directValue","LargeNumberOfPagePipe","startAtPage","totalPage","arrayWithPageNumber","display","components","directives","pipes","WzImgManagerModule","NgModule","declarations","imports","CommonModule","HttpClientModule","FormsModule","NgScrollbarModule","NgScrollbarReachedModule","NwbAllModule","ImageCropperModule","CdkTableModule","DragDropModule","TranslateModule","exports","url_raw_image","url_100_image","url_200_image","url_400_image","url_800_image"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { Subscriber, Observable, ReplaySubject } from 'rxjs';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgSelectionService {\n\n imgSelectedList: ImgPictureDTO[] = [];\n multipleImgMode: boolean = false;\n private imgSelectionSubscriber: Subscriber<any>[] = [];\n private imgListLoading: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n\n constructor() {}\n\n getImgSelection() {\n return this.imgSelectedList;\n }\n\n // Use in img manager webelement, when the product img selection is retrieved\n setImgSelection(imgSelectedList: ImgPictureDTO[]) {\n this.imgSelectedList.length = 0;// Remove all the elements from the array and keep the reference\n\n if (imgSelectedList && imgSelectedList.length) {\n imgSelectedList.forEach(elem => this.imgSelectedList.push(elem));\n }\n this.emitImgSelectionChange();\n }\n\n addImgSelected(picture : ImgPictureDTO) {\n if (this.multipleImgMode) {\n this.imgSelectedList.push(picture);\n } else {\n this.imgSelectedList = [picture];\n }\n this.emitImgSelectionChange();\n }\n\n getImgSelectionChange() {\n const obsImgSelection = new Observable<ImgPictureDTO[]>(subscriber => {\n this.imgSelectionSubscriber.push(subscriber);\n });\n return obsImgSelection;\n }\n\n emitImgSelectionChange() {\n this.imgSelectionSubscriber.map(obs =>\n obs.next(JSON.parse(JSON.stringify(this.imgSelectedList)))\n );\n }\n\n removeImgSelectedByIndex(index: number) {\n this.imgSelectedList.splice(index, 1);\n this.emitImgSelectionChange();\n }\n\n removeImgSelectedById(id_file: string) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n let index = 0;\n for (const img of this.imgSelectedList) {\n if(img.id_file === id_file) {\n this.removeImgSelectedByIndex(index);\n break;\n }\n index++;\n }\n }\n\n removeImgSelectionByIds(id_file_list: string[]) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n\n for (let index = this.imgSelectedList.length -1; index > -1 ; index--) {\n const id_file = this.imgSelectedList[index].id_file;\n if (id_file_list.indexOf(id_file) !== -1) {\n this.removeImgSelectedByIndex(index);\n }\n }\n }\n\n removeAllImgSelected() {\n this.imgSelectedList.length = 0;\n this.emitImgSelectionChange();\n // Remove all the elements from the array and keep the reference\n }\n\n setMultipleImgMode(activated: boolean) {\n this.multipleImgMode = activated;\n }\n\n initImgSelectedList(imgSelectedList: ImgPictureDTO[]) {\n // Retrieve the imgSelectedList from parameter\n if (imgSelectedList) {\n this.imgSelectedList = imgSelectedList;\n return;\n }\n // Remove all elements from imgSelectedList\n if (this.imgSelectedList && this.imgSelectedList.length) {\n this.imgSelectedList.splice(0, this.imgSelectedList.length);\n return;\n }\n this.imgSelectedList = [];\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n emitImgListLoading(loading: boolean){\n this.imgListLoading.next(loading);\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n getImgListLoadingEventListner(){\n return this.imgListLoading.asObservable();\n }\n\n /**\n * Use angular cdk function\n * Called by img selection component\n * @param event\n */\n moveImgOrder(event: CdkDragDrop<string[]>) {\n const fromIndex = event.previousIndex;\n const toIndex = event.currentIndex;\n this.imgSelectedList.splice(toIndex, 0, this.imgSelectedList.splice(fromIndex, 1)[0]);\n this.emitImgSelectionChange();\n }\n}\n","import { ImgApiDto } from '../apis/api.dto';\nimport { ImgCDNConfigDTO } from '../image-cdn/image-cdn-config.dto';\n\nexport class ImgManagerConfigDto {\n api: ImgApiDto;\n imgCDNConfig : ImgCDNConfigDTO;\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from \"rxjs\";\nimport { ParamsImgManagerDTO } from '../dto/img-manager.dto';\nimport { ImgManagerDisplayConfig } from '../dto/export-dtos.api';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerService {\n\n imgManagerRoute: string;\n shopToken: string;\n\n params = new HttpParams().set(\"limit\",\"20\").set(\"page\",\"1\");\n\n // Display the img selection\n private pageFicheProductConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: true,\n showImgManagerModule: true,\n showSelection: true,\n displayBtn: true,\n pageficheProduct: true\n }\n\n private wiziblockConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n private simpleWithButtonOpenerConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: true\n }\n\n private fullWindowConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'window',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n constructor(private http: HttpClient) { }\n\n setApiConfig(img_manager_route: string, shop_token: string) {\n this.imgManagerRoute = img_manager_route;\n this.shopToken = shop_token;\n }\n\n private getOptionsHeaders(params?: ParamsImgManagerDTO) {\n const header = { headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.shopToken\n })\n };\n if (params) {\n this.getParams(params);\n header['params'] = this.params\n }\n return header;\n }\n\n getShopImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images`, this.getOptionsHeaders(params));\n }\n\n getShopTotalImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/total/image`, this.getOptionsHeaders(params));\n }\n\n getShopImg(idFile: string): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images/${idFile}`, this.getOptionsHeaders());\n }\n\n getParams(params: ParamsImgManagerDTO){\n this.params = new HttpParams();\n this.params = this.params.set('id_file:sort', 'desc');\n for (const param in params) {\n this.params = this.params.set(param, params[param]);\n }\n }\n\n uploadFile(formData: FormData) {\n return this.http.post(`${this.imgManagerRoute}/images/template`, formData, this.getOptionsHeaders());\n }\n\n uploadFileByUrl(url: string, fileName?: string) {\n const body = {\n url,\n fileName\n };\n return this.http.post(`${this.imgManagerRoute}/images/template`, { url, fileName }, this.getOptionsHeaders());\n }\n\n replaceImg(imageBase64: string, id_file: string) {\n const body = {\n imageBase64,\n type : \"RAW\"\n }\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}/replace`, body, this.getOptionsHeaders());\n }\n\n changeImgName(fileName: string, id_file: string) {\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}?file_name=${fileName}`, null, this.getOptionsHeaders());\n }\n\n removeImg(id_file: string) {\n return this.http.delete(`${this.imgManagerRoute}/images/${id_file}`, this.getOptionsHeaders());\n }\n\n removeMultipleImg(id_array: string[]){\n return this.http.post(`${this.imgManagerRoute}/images-multiple-delete`, { id_array }, this.getOptionsHeaders());\n }\n\n getImgManagerDisplayConfig(displayName: \"window\" | \"wizi-block\" | \"fiche-product\" | \"simple-with-button\") {\n switch (displayName) {\n case \"window\":\n return this.fullWindowConfig;\n\n case \"wizi-block\":\n return this.wiziblockConfig;\n\n case \"fiche-product\":\n return this.pageFicheProductConfig;\n\n case \"simple-with-button\":\n return this.simpleWithButtonOpenerConfig;\n\n default:\n return;\n }\n }\n\n getAllImgManagerDisplayConfig(): ImgManagerDisplayConfig[] {\n return [\n this.fullWindowConfig,\n this.wiziblockConfig,\n this.pageFicheProductConfig,\n this.simpleWithButtonOpenerConfig,\n ]\n }\n}","import { Injectable } from '@angular/core';\nimport { ImgCDNConfigDTO } from '../../dto/config/image-cdn/image-cdn-config.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgCDNService {\n\n imgCDNConfig: ImgCDNConfigDTO = null;\n\n constructor() {}\n\n setImgCDNConfig(imgCDNConfig: ImgCDNConfigDTO) {\n this.imgCDNConfig = imgCDNConfig;\n }\n\n getUrlImg(size: '100'|'200'|'400'|'800'|'raw'|string) {\n const urlProperty = Object.keys(this.imgCDNConfig)\n .filter(url =>\n new RegExp(size, 'i').test(url)\n )[0];\n\n return this.imgCDNConfig[urlProperty];\n }\n\n getAllSize(): string[] {\n return Object.keys(this.imgCDNConfig)\n .map(elem =>\n elem.match(/_(\\w+)_/)[1]\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ImgManagerConfigDto } from '../../dto/config/external/external-config.dto';\nimport { ImgManagerService } from '../img-manager.service';\nimport { ImgCDNService } from './img-cdn.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerConfigService {\n\n externalConfig: ImgManagerConfigDto;\n\n constructor(\n private imgManagerService: ImgManagerService,\n private imgCDNService: ImgCDNService\n ) {}\n\n /**\n * Set imgManagerService and imgCDNService\n * Canva and Pexel service retrieve the externalConfig at their initialization\n * @param externalConfig\n */\n setExternalConfig(externalConfig: ImgManagerConfigDto) {\n this.externalConfig = externalConfig;\n this.imgManagerService.setApiConfig(externalConfig.api.image_manager_route, externalConfig.api.shop_token);\n this.imgCDNService.setImgCDNConfig(externalConfig.imgCDNConfig);\n }\n\n getCanvaApiURL() {\n return this.externalConfig.api.canva_url;\n }\n\n getCanvaApiToken() {\n return this.externalConfig.api.canva_token;\n }\n\n getRouteAssets() {\n return this.externalConfig.api.assets_route;\n }\n\n getPexelsApiURL() {\n return this.externalConfig.api.pexels_route;\n }\n\n getPexelsApiToken() {\n return this.externalConfig.api.pexels_token;\n }\n\n getShopCategory() {\n return this.externalConfig.api.shop_category;\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n\n private userdisplayPreference = 'WzImgManagerListDisplayed';\n\n constructor() {\n }\n\n /**\n * true : display list\n * false : display mosaic\n * @param value\n */\n setUserDisplayPreference(value: boolean) {\n localStorage.setItem(this.userdisplayPreference, '' + value);\n }\n\n getUserDisplayPreference(): boolean {\n const value = localStorage.getItem(this.userdisplayPreference);\n return value == 'true';\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subscriber, BehaviorSubject } from 'rxjs';\nimport { CanvaButtonApi } from '../dto/canva.dto';\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { WiziBlockMediaDto } from '../dto/wizi-block-media.dto';\n\ndeclare let Canva : {\n DesignButton : {\n initialize: (opts: { apiKey: string }) => Promise<CanvaButtonApi>;\n }\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CanvaService {\n\n canvaApi; // Object use to manage the canva api\n canvaApiURL: string;\n canvaApiKey: string;\n canvaLogoRoute: string;\n\n private bindExpectedImgSizeEvent: BehaviorSubject<WiziBlockMediaDto> = new BehaviorSubject<WiziBlockMediaDto>(null);\n private bindExpectedSizeDone = this.bindExpectedImgSizeEvent.asObservable();\n\n constructor(\n private externalConfigService: ImgManagerConfigService\n ) { }\n\n private setCanvaApiConfig() {\n this.canvaApiURL = this.externalConfigService.getCanvaApiURL();\n this.canvaApiKey = this.externalConfigService.getCanvaApiToken();\n }\n\n getCanvaLogo() {\n return this.externalConfigService.getRouteAssets() + \"canva/icon_canva.svg\";\n }\n\n bindEventExepectedImgSizeChange() {\n return this.bindExpectedSizeDone;\n }\n\n expectedImgSizesChange (mediaDTO: WiziBlockMediaDto){\n this.bindExpectedImgSizeEvent.next(mediaDTO);\n }\n\n getCanvaApi():Observable<CanvaButtonApi> {\n if (!this.canvaApiURL || !this.canvaApiKey) {\n this.setCanvaApiConfig();\n }\n return new Observable(observer => {\n this.loadCanva().subscribe({\n complete: () => {\n if(this.canvaApi && Canva.DesignButton) {\n observer.next(this.canvaApi);\n observer.complete();\n } else {\n this.initializeCanva(observer);\n }\n }\n })\n });\n }\n\n private initializeCanva(observer: Subscriber<CanvaButtonApi>) {\n if (Canva.DesignButton) {\n Canva.DesignButton.initialize({\n apiKey: this.canvaApiKey\n\n }).then((canvaApi) => {\n this.canvaApi = canvaApi;\n observer.next(this.canvaApi);\n observer.complete();\n });\n }\n }\n\n private loadCanva():Observable<null> {\n return new Observable(observer => {\n if(this.canvaApi) {\n observer.complete();\n }else{\n this.loadCanvaScript(observer);\n }\n });\n }\n\n private loadCanvaScript(observer: Subscriber<null>) {\n\n const node = document.createElement('script');\n node.src = this.canvaApiURL;\n node.type = 'text/javascript';\n node.async = false;\n node.charset = 'utf-8';\n node.onload = () => {\n observer.complete();\n }\n document.getElementsByTagName('head')[0].appendChild(node);\n }\n}\n","import {Injectable} from '@angular/core';\nimport { Subject } from \"rxjs\";\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class ImgEventService {\n\n constructor() { }\n\n private imgToEditEvent: Subject<ImgPictureDTO> = new Subject<ImgPictureDTO>();\n private imgRemoved: Subject<string> = new Subject<string>();\n private imgAdded: Subject<string> = new Subject<string>();\n private listDisplayedChange: Subject<boolean> = new Subject<boolean>();\n\n emitImgRemoved(id_file: string){\n this.imgRemoved.next(id_file);\n }\n\n getImgRemovedEventListner(){\n return this.imgRemoved.asObservable();\n }\n\n emitImgToEdit(imgToEdit: ImgPictureDTO){\n this.imgToEditEvent.next(imgToEdit);\n }\n\n getImgToEditEventListner(){\n return this.imgToEditEvent.asObservable();\n }\n\n emitImgAdded(id_file: string){\n this.imgAdded.next(id_file);\n }\n\n getImgAddedEventListner(){\n return this.imgAdded.asObservable();\n }\n\n emitlistDisplayedChange(value: boolean){\n this.listDisplayedChange.next(value);\n }\n\n getlistDisplayedChange(){\n return this.listDisplayedChange.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DomService {\n private documentEventSource = new Subject();\n private documentEventDone = this.documentEventSource.asObservable();\n\n private documentScrollSource = new Subject();\n private documentScrollDone = this.documentScrollSource.asObservable();\n\n documentEvent() {\n return this.documentEventDone;\n }\n\n setDocumentEventListener() {\n document.body.addEventListener('click', event => {\n this.documentEventSource.next(event.target);\n });\n }\n\n documentScroll() {\n return this.documentScrollDone;\n }\n\n setScrollEventListener() {\n window.onscroll = () => {\n this.documentScrollSource.next(window);\n };\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from './services/img-selection.service';\nimport { ImgManagerConfigDto } from './dto/config/external/external-config.dto';\nimport { ImgManagerConfigService } from './services/config/external-config.service';\nimport { Subscription } from 'rxjs';\nimport { UserSettingsService } from './services/user-settings.service';\nimport { CanvaService } from './services/canva.service';\nimport { ImgEventService } from './services/img-event.service';\nimport { DomService } from './services/dom.service';\nimport { HostListener } from '@angular/core';\nimport { stateDisplayed } from '../public-api';\n\n@Component({\n selector: 'wz-img-manager',\n templateUrl: './wz-img-manager.component.html'\n})\nexport class WzImgManagerComponent implements OnInit {\n @Input() stateDisplayed: stateDisplayed;\n @Input() showSelection: boolean = false;\n @Input() externalConfig: ImgManagerConfigDto;\n @Output() imgManagerClosed = new EventEmitter();\n private _multipleImgMode: boolean = false;\n\n @Input() set multipleImgMode(activate: boolean) {\n this._multipleImgMode = activate;\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n }\n\n get multipleImgMode(): boolean {\n return this._multipleImgMode;\n }\n\n _showImgManagerModule: boolean = false;\n @Input() set showImgManagerModule(activate: boolean) {\n this._showImgManagerModule = activate;\n if (activate) {\n this.displaySmall();\n }\n }\n\n get showImgManagerModule(): boolean {\n return this._multipleImgMode;\n }\n\n @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n if (this.stateDisplayed && this.stateDisplayed !== 'window') {\n this.onClose();\n }\n }\n\n close: boolean = false\n selectImgEvent: Subscription;\n listDisplayed: boolean = false;\n listDisplayedEvent: Subscription;\n hideTab: boolean = false;\n // Save the defaut overflow apply to html tag, when the module is full open\n private overflowHTML: string;\n private bodyPadding: number;\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private externalConfigService: ImgManagerConfigService,\n private userSettingsService: UserSettingsService,\n private canvaService: CanvaService,\n private imgEventService: ImgEventService,\n private domService: DomService\n ) {}\n\n ngOnInit(): void {\n this.externalConfigService.setExternalConfig(this.externalConfig);\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n this.imgSelectionService.initImgSelectedList(null);\n this.selectImgEvent = this.imgSelectionService.getImgSelectionChange().subscribe(imgSlection =>{\n\n if (imgSlection && imgSlection.length && this.checkCloseImgManager()) {\n // Close the img manager\n this.onClose();\n }\n });\n this.checkUserDisplayPreference();\n // Use when the img manager is full open or open in page. This display the user preference display, mosaic or list.\n this.listDisplayedEvent = this.imgEventService.getlistDisplayedChange().subscribe(value => this.listDisplayed = value);\n // Register dom service to listen on all event on the body to avoid having multiple instance of the same thing every where\n this.domService.setDocumentEventListener();\n }\n\n checkUserDisplayPreference() {\n if (this.stateDisplayed === 'window' || this.stateDisplayed === 'full') {\n this.listDisplayed = this.userSettingsService.getUserDisplayPreference();\n }\n }\n\n setCurrentTab(event) {\n if (event === 'img-edition') {\n this.hideTab = true;\n return;\n }\n this.hideTab = false;\n }\n\n displaySmall() {\n if (this.stateDisplayed !== 'window') {\n setTimeout(() => {\n this.stateDisplayed = 'small';\n this.addBodyBottomPaddingForModule();\n }, 10);\n }\n }\n\n openSmall() {\n this.stateDisplayed = 'small';\n this.setBodyMainScroll();\n this.listDisplayed = false;\n }\n\n openFull() {\n this.stateDisplayed = 'full';\n this.checkUserDisplayPreference();\n this.hideBodyMainScroll();\n }\n\n onClose() {\n this.stateDisplayed = 'closed';\n this.hideTab = false;\n this.setBodyMainScroll();\n this.removeBodyBottomPaddingForModule();\n // Wait the end of the closing annimation\n setTimeout(() => {\n this.imgManagerClosed.emit();\n }, 250);\n }\n\n onImgManagerClosed() {\n this.onClose();\n }\n\n /**\n * Close the img manager after one img is selected, if not in multiple img to select\n */\n checkCloseImgManager() {\n return !this.multipleImgMode && this.stateDisplayed !== 'window' ? true : false;\n }\n\n hideBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n\n if (!this.overflowHTML) {\n this.overflowHTML = html.style.overflowY;\n }\n\n html.style.overflowY = \"hidden\";\n }\n\n setBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n html.style.overflowY = this.overflowHTML ? this.overflowHTML : \"scroll\";\n }\n\n addBodyBottomPaddingForModule() {\n const body = document.getElementsByTagName('body')[0];\n this.bodyPadding = this.bodyPadding ? parseInt(body.style.paddingBottom) : 0;\n body.style.paddingBottom = this.bodyPadding + 300 + 'px';\n }\n\n removeBodyBottomPaddingForModule() {\n if (typeof this.bodyPadding !== 'undefined') {\n const body = document.getElementsByTagName('body')[0];\n body.style.paddingBottom = this.bodyPadding + 'px';\n this.bodyPadding = 0;\n }\n }\n\n ngOnDestroy() {\n this.selectImgEvent.unsubscribe();\n this.canvaService.expectedImgSizesChange(null);\n this.listDisplayedEvent.unsubscribe();\n }\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\n\nexport const easeInOut = // the fade-in/fade-out animation.\ntrigger('easeInOut', [\n\n // the \"in\" style determines the \"resting\" state of the element when it is visible.\n state('in', style({opacity: 1})),\n\n // fade in when created. this could also be written as transition('void => *')\n transition(':enter', [\n style({opacity: 0}),\n animate('0.5s ease-in-out' )\n ]),\n]);\n","import { Injectable } from '@angular/core';\nimport { NwbAlertConfig, NwbAlertComponent } from '@wizishop/ng-wizi-bulma';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NwbAlertService } from '@wizishop/ng-wizi-bulma';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlertService {\n\n actionMsg = 'ImgManager.alert.action';\n\n alertConfig: NwbAlertConfig = {\n message: '',\n duration: 5000\n }\n\n private alertRefComponent: NwbAlertComponent;\n\n constructor(\n private nwbAlertService: NwbAlertService,\n private translateService: TranslateService\n ) { }\n\n openAlert(msgKey: string) {\n this.closePreviousAlert();\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.setAlertColor(msgKey);\n\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n openAlertWithBackendRespons(msgKey: string, msgBackend: string) {\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.alertConfig.message += '<br/>' + JSON.parse(msgBackend).message;\n\n this.closePreviousAlert();\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n private closePreviousAlert() {\n if (this.alertRefComponent) {\n this.alertRefComponent.dismiss();\n }\n }\n\n private setAlertColor(msgKey: string) {\n const isErrorMsg: boolean = /error/i.test(msgKey);\n this.alertConfig.color = isErrorMsg ? 'is-danger' : 'is-success';\n }\n}\n","import {Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef} from '@angular/core';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport {ImgManagerConfigService} from \"../../services/config/external-config.service\";\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'img-upload',\n templateUrl: './img-upload.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgUploadComponent implements OnInit {\n\n files: any = [];\n isLoading: boolean = false;\n assetsIcon: string;\n @Input() stateDisplayed: stateDisplayed;\n @Output() imgUploaded = new EventEmitter();\n\n @ViewChild('dragAndDropBox') dragAndDropBox: ElementRef;\n\n loadingText = 'ImgManager.ImgUpload.loading';\n errorUploadingImg = 'ImgManager.ImgUpload.errorUploadingImg';\n errorNotImg = 'ImgManager.ImgUpload.errorNotImg';\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private externalConfigService: ImgManagerConfigService\n ) {}\n\n ngOnInit(): void {\n this.assetsIcon = this.getAssets();\n }\n\n filesChangeByClick(event: any) {\n this.uploadFile(event.target.files);\n }\n\n getAssets() {\n return this.externalConfigService.getRouteAssets() + \"img/icon_picture.svg\";\n }\n\n filesChangeByDragAndDrop(filesList: File[]) {\n this.removeDragAndDropStyle();\n this.uploadFile(filesList);\n }\n\n uploadFile(files: File[]) {\n if (files && !files.length) {\n return;\n }\n\n this.isLoading =true;\n const imgToUploadList: Observable<any>[] = [];\n for (const file of files) {\n\n const formData = new FormData();\n formData.append('image', file, file.name);\n\n if(!this.isFileImage(file.type)) {\n this.alertService.openAlert(this.errorNotImg);\n this.isLoading =false;\n continue;\n }\n imgToUploadList.push(this.imgManager.uploadFile(formData));\n }\n\n forkJoin(imgToUploadList).subscribe(\n (img: ImgPictureDTO[]) => {\n this.onImgUpload(img),\n this.isLoading =false;\n },\n error => {\n this.alertService.openAlert(this.errorUploadingImg);\n this.isLoading =false;\n }\n )\n }\n\n /**\n * Send the img uploaded to the tabs components,\n * Then the tabs components add the img to upload list by calling the method onImgUploaded of the upload-list component\n * @param img\n */\n onImgUpload(img: ImgPictureDTO[]) {\n this.imgUploaded.emit(img);\n }\n\n isFileImage(fileType: string) {\n return fileType.split('/')[0] === 'image';\n }\n\n /**\n * Remove the style of the drag and drop box\n * After an img is droped, the box is still grey\n */\n removeDragAndDropStyle() {\n this.dragAndDropBox.nativeElement.style = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ImgManagerService } from './img-manager.service';\nimport { AlertService } from './alert.service';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { PictureNameUpdate } from '../dto/picture-name-update.dto';\n\n@Injectable({providedIn: 'root'})\nexport class RenamePictureService {\n\n private picturesList: ImgPictureDTO[] = [];\n private pictureNameChanged: Subject<PictureNameUpdate> = new Subject<PictureNameUpdate>();\n\n private errorRenameImg = 'ImgManager.ImgList.errorRenameImg';\n private msgSavingImgName = 'ImgManager.ImgLib.savingImgName';\n private msgImgNameSaved = 'ImgManager.ImgLib.imgNameSaved';\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n )\n {\n this.setEvents();\n }\n\n setPicturesList(picturesList: ImgPictureDTO[]) {\n this.picturesList = picturesList;\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChanged.next(pictureRenamed);\n }\n\n private setEvents() {\n this.pictureNameChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe((pictureNameUpdate:PictureNameUpdate) => {\n this.renamePicture(pictureNameUpdate);\n });\n }\n\n private renamePicture(pictureNameUpdate: PictureNameUpdate) {\n const picture: ImgPictureDTO = this.getPictureById(pictureNameUpdate.id);\n if (!picture) {\n this.alertService.openAlert(this.errorRenameImg);\n return;\n }\n this.alertService.openAlert(this.msgSavingImgName);\n this.imgManager\n .changeImgName(picture.display_name, picture.id_file)\n .subscribe(\n (data: ImgPictureDTO) => {\n picture.display_name = data.display_name;\n this.alertService.openAlert(this.msgImgNameSaved);\n },\n (error) => {\n picture.display_name = pictureNameUpdate.previousName;\n this.alertService.openAlert(this.errorRenameImg);\n }\n );\n }\n\n private getPictureById(id_file: string): ImgPictureDTO {\n if (!this.picturesList) {\n return;\n }\n\n for (const picture of this.picturesList) {\n if(picture.id_file === id_file) {\n return picture;\n }\n }\n\n return null;\n }\n\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { PictureNameUpdate, stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\n\n@Component({\n selector: 'upload-list',\n templateUrl: './upload-list.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class UploadListComponent implements OnInit {\n\n picturesList: ImgPictureDTO[] = [];\n imgSelectionChange: Subscription;\n selectImgEvent: Subscription;\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() multipleImgMode: boolean = false;\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private renamePictureService: RenamePictureService\n ) { }\n\n ngOnInit(): void {\n this.setEvents();\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n img.forEach(picture =>\n this.picturesList.push(picture)\n );\n this.renamePictureService.setPicturesList(this.picturesList);\n }\n\n onToggleSelectImg(index: number) {\n if (this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n private setEvents() {\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n ngOnDestroy(): void {\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import {Component, Input, OnInit, ViewChild, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { UploadListComponent } from '../upload-list/upload-list.component';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { NwbSnackbarConfig } from '@wizishop/ng-wizi-bulma';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'img-tabs',\n templateUrl: './img-tabs.component.html'\n})\nexport class ImgTabsComponent implements OnInit {\n\n @Input()\n multipleImgMode: boolean = false;\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n listDisplayed = false;\n\n @Output()\n imgManagerClosed = new EventEmitter();\n\n @Output()\n currentTab = new EventEmitter();\n\n tabActive = 'images-view';\n tabs: string[] = ['img-upload', 'images-view', 'pexels-lib', 'img-edition'];\n editTab = false;\n\n imgToEdit: ImgPictureDTO;\n\n imgUpload = false;\n\n @ViewChild( 'imgUploadedImg' )\n imgUploadedComponent: UploadListComponent ;\n\n snackBarNewVersionConfig: NwbSnackbarConfig = {\n message: '',\n duration: 3000\n };\n\n constructor(\n private imgEventEditService: ImgEventService,\n private alertService: AlertService,\n ) { }\n\n ngOnInit(): void {\n this.imgEventEditService.getImgToEditEventListner().subscribe(imgToEdit =>{\n this.tabActive = this.tabs[3];\n this.imgToEdit = imgToEdit;\n this.editTab = true;\n this.currentTab.emit(this.tabs[3]);\n });\n }\n\n toggleTabs(value: string) {\n this.imgUpload = false;\n this.editTab = false;\n this.tabActive = value;\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n this.imgUpload = true;\n this.imgUploadedComponent.onImgUploaded(img);\n }\n\n onEditClosed(msgKey: string) {\n this.editTab = false;\n this.toggleTabs(this.tabs[1]);\n if (msgKey) {\n this.alertService.openAlert(msgKey);\n }\n this.currentTab.emit('close');\n }\n\n onShowImgUploaded() {\n this.tabActive = this.tabs[1];\n }\n\n onImgManagerClosed() {\n this.imgManagerClosed.emit();\n }\n}\n","import { Directive, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[appDragDrop]'\n})\nexport class DragDropDirective {\n\n @Output() onFileDropped = new EventEmitter<Event>();\n\n @HostBinding('style.background-color') background = '#fff'\n @HostBinding('style.opacity') opacity = '1'\n\n @HostListener('dragover', ['$event']) onDragOver(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5';\n this.opacity = '0.8';\n }\n\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#fff';\n this.opacity = '1';\n }\n\n @HostListener('drop', ['$event']) public ondrop(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5'\n this.opacity = '1'\n const files = evt.dataTransfer.files;\n if (files.length > 0) {\n this.onFileDropped.emit(files);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport { map} from \"rxjs/operators\";\nimport {Observable} from \"rxjs\";\nimport {WzImgLibDto} from \"../dto/pexels-img.dto\";\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PexelsService {\n apiBaseUrl;\n apiKey;\n lang: string;\n languages = {'fr': 'fr-FR', 'en': 'en-US', 'it': 'it-IT', 'es': 'es-ES'};\n\n constructor(\n private http: HttpClient,\n private externalConfigService: ImgManagerConfigService,\n private translateService: TranslateService\n ) {\n this.setLang(this.translateService.currentLang);\n this.translateService.onLangChange.subscribe(langData => {\n this.setLang(langData.lang);\n })\n }\n\n setLang(lang: string) {\n this.lang = this.languages[lang] ? this.languages[lang] : 'fr-FR';\n }\n\n searchOnPexels(toSearch: string, perPage: number, page: number): Observable<WzImgLibDto> {\n if(!this.apiBaseUrl || this.apiKey) {\n this.apiBaseUrl = this.externalConfigService.getPexelsApiURL();\n this.apiKey = this.externalConfigService.getPexelsApiToken();\n }\n\n const httpOptions = {\n headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.apiKey\n })\n };\n\n let request;\n\n // If search value is not empty or blank\n if (toSearch && !/^\\s*$/.test(toSearch)) {\n request = `/search?query=${toSearch}&per_page=${perPage}&page=${page}&locale=${this.lang}`;\n\n } else { // Search by category or display Pexels selection\n const shopCategory = this.externalConfigService.getShopCategory();\n\n // Search by shop category\n if (shopCategory && shopCategory !== 'other' && shopCategory !== 'btob') {\n request = `/search?query=${shopCategory}&per_page=${perPage}&page=${page}&locale=en-US`;\n } else { // Display Pexels selection\n request = `/curated?per_page=${perPage}&page=${page}`;\n }\n }\n\n return this.http.get(this.apiBaseUrl + request, httpOptions).pipe(\n map((data: WzImgLibDto) => {\n return data;\n })\n );\n }\n}\n","import { stagger } from '@angular/animations';\nimport { query } from '@angular/animations';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nexport const listAnnimation = // the fade-in/fade-out animation.\ntrigger('listAnimation', [\n transition(':enter, * => 0, * => -1', []),\n transition(':increment', [\n query(':enter', [\n style({opacity: 0, transform: 'translateY(100px)'}),\n stagger(50, [\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)', style({ opacity: 1, transform: 'none' })),\n ]),\n ], { optional: true })\n ]),\n]);\n","import {AfterViewInit, Component, ElementRef, OnInit, ViewChild, Input, Output, EventEmitter} from '@angular/core';\nimport {PexelsService} from '../../services/pexels.service';\nimport {Subject, Subscription} from 'rxjs';\nimport {WzImgLibDto, PhotosColumns, WzImgLibPhotoDto} from '../../dto/pexels-img.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { listAnnimation } from '../../animations/listAnnimation/list.animation';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'pexels-lib',\n templateUrl: './pexels-lib.component.html',\n animations: [\n easeInOut,\n listAnnimation\n ]\n})\nexport class PexelLibComponent implements OnInit, AfterViewInit {\n\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n searchValue: string = '';\n /** Pass to true to hide search input */\n @Input()\n disableSearch: boolean = false;\n\n @Output()\n showImgUploaded = new EventEmitter();\n\n perPage = 30;\n searchUpdated = new Subject();\n oldSearchValue: string;\n nbResult = 0;\n wzImgLibDto: WzImgLibDto;\n currentPage = 1;\n isLoading = true;\n initComponent = true;\n photosColumns: PhotosColumns[] = [];\n nbColumuns = 6;\n responsiveColumns = [1250, 1050, 750, 500];\n outerElement = null;\n\n uploadingImg = 'ImgManager.PexelLib.uploadingImg';\n untitled = 'ImgManager.PexelLib.untitled';\n successUploadPhoto = 'ImgManager.PexelLib.successImport';\n errorUploadPhoto = 'ImgManager.PexelLib.errorUploadPhoto';\n errorRetrievePhotos = 'ImgManager.PexelLib.errorRetrievePhotos';\n\n private subs: Subscription[] = [];\n\n @ViewChild('outerElement') set content(control: ElementRef) {\n this.outerElement = control;\n }\n\n constructor(\n private wzImgLibService: PexelsService,\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private translateService: TranslateService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit() {\n this.oldSearchValue = this.searchValue;\n this.isLoading = false;\n\n this.setNbColumnsToDisplayPhoto();\n this.setPhotosColumns();\n this.search();\n }\n\n setNbColumnsToDisplayPhoto(): void {\n const width = this.outerElement.nativeElement.offsetWidth;\n\n if (this.stateDisplayed !== 'window') {\n this.nbColumuns = 8;\n }\n\n this.responsiveColumns.forEach(value => {\n if (width < value) {\n this.nbColumuns--;\n }\n });\n }\n\n onSearchNameChanged() {\n this.onSearchChange();\n }\n\n onBottomReached() {\n this.scrollHandler();\n }\n\n onSearchChange() {\n this.search();\n }\n\n search() {\n if (this.isLoading) {\n return;\n }\n if (this.searchValue !== this.oldSearchValue) {\n this.resetSearch();\n }\n\n // All the picture are displayed\n if (this.nbResult && this.nbResult <= (this.currentPage - 1) * this.perPage) {\n return;\n }\n\n this.isLoading = true;\n const searchSub = this.wzImgLibService.searchOnPexels(this.searchValue, this.perPage, this.currentPage).subscribe(\n (data: WzImgLibDto) => {\n this.wzImgLibDto = data;\n this.nbResult = this.wzImgLibDto.total_results;\n\n if (this.nbResult) {\n data.photos.forEach(photo => {\n const bestColumnIndex = this.getBestColumn();\n const height = (photo.height / photo.width) * 1000;\n\n this.photosColumns[bestColumnIndex].height += height;\n this.photosColumns[bestColumnIndex].photos.push(photo);\n });\n }\n\n this.isLoading = false;\n this.initComponent = false;\n },\n error => {\n this.isLoading = false;\n this.initComponent = false;\n this.alertService.openAlert(this.errorRetrievePhotos);\n }\n );\n\n this.subs.push(searchSub);\n }\n\n scrollHandler() {\n if (this.isLoading) {\n return;\n }\n const bestColumnIndex = this.getBestColumn();\n const lastPic = this.photosColumns[bestColumnIndex].photos[this.photosColumns[bestColumnIndex].photos.length - 1];\n const lastPhoto = lastPic ? document.querySelector<HTMLImageElement>('img[src=\"' + lastPic.src.medium + '\"]') : null;\n\n if (lastPhoto) {\n if (!this.isLoading) {\n this.currentPage += 1;\n this.search();\n }\n }\n }\n\n setPhotosColumns() {\n for (let indexColumn=0; indexColumn < this.nbColumuns ; indexColumn++) {\n const photosColumn: PhotosColumns = {\n height: 0,\n photos: []\n };\n this.photosColumns.push(photosColumn);\n }\n }\n\n getBestColumn(): number {\n const bestColumn = {\n index: 0,\n height: this.photosColumns[0].height\n };\n this.photosColumns.forEach((photosColumn, index) => {\n if (bestColumn.height > photosColumn.height) {\n bestColumn.index = index;\n bestColumn.height = photosColumn.height;\n }\n });\n return bestColumn.index;\n }\n\n resetSearch() {\n this.oldSearchValue = this.searchValue;\n this.photosColumns = [];\n this.currentPage = 1;\n this.setPhotosColumns();\n }\n\n uploadPhoto(photo: WzImgLibPhotoDto, url: string) {\n photo.uploading = true;\n\n const uploadSub = this.imgManager.uploadFileByUrl(url, this.translateService.instant(this.untitled)).subscribe(\n (img: ImgPictureDTO) => {\n photo.uploading = false;\n photo.uploaded = true;\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n photo.uploading = false;\n if(error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadPhoto, error.error.message);\n } else {\n this.alertService.openAlert(this.errorUploadPhoto);\n }\n });\n\n // Display img uploading msg\n this.alertService.openAlert(this.uploadingImg);\n this.subs.push(uploadSub);\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Directive, Input, Output } from \"@angular/core\";\nimport { EventEmitter } from '@angular/core';\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { Subscription } from \"rxjs\";\nimport { stateDisplayed } from \"../../dto/export-dtos.api\";\nimport { PictureNameUpdate } from \"../../dto/picture-name-update.dto\";\nimport { ImgPictureDTO } from \"../../dto/img-manager.dto\";\nimport { AlertService } from \"../../services/alert.service\";\nimport { ImgManagerConfigService } from \"../../services/config/external-config.service\";\nimport { ImgCDNService } from \"../../services/config/img-cdn.service\";\nimport { ImgEventService } from \"../../services/img-event.service\";\nimport { ImgManagerService } from \"../../services/img-manager.service\";\nimport { ImgSelectionService } from \"../../services/img-selection.service\";\nimport { TableFilters } from \"../../services/table/filters-table.service\";\n\n@Directive()\nexport abstract class ImagesActionHandler {\n @Input()\n picturesList: ImgPictureDTO[] = [];\n @Output()\n picturesListChange: EventEmitter<void> = new EventEmitter();\n\n @Input()\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 30,\n currentPage: 1\n };\n @Input()\n displayPexelsResults: boolean = false;\n\n @Input()\n disable: boolean = false;\n @Output()\n disableChange: EventEmitter<boolean> = new EventEmitter();\n\n @Output()\n filtersChange = new EventEmitter();\n @Output()\n pictureNameChange: EventEmitter<PictureNameUpdate> = new EventEmitter();\n\n @Input() isLoading = false;\n\n @Input()\n stateDisplayed: stateDisplayed;\n\n previousName: string; // Use to save the previous picture name, when a user change his name\n fakeImgRoute: string;\n\n private getDataAPISub: Subscription;\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n private errorAlreadyUsedImg = 'ImgManager.ImgList.errorAlreadyUsed';\n\n constructor(\n protected imgManager: ImgManagerService,\n protected imgSelectionService: ImgSelectionService,\n protected http: HttpClient,\n protected imgCDNService: ImgCDNService,\n protected imgEventCardService: ImgEventService,\n protected alertService: AlertService,\n protected translateService: TranslateService,\n protected externalService: ImgManagerConfigService\n ) {\n this.fakeImgRoute = this.externalService.getRouteAssets() + 'img/fake.png';\n }\n\n /** Event emit when the header checkbox is checked */\n onToggleAllCheckBoxRow(event) {\n this.picturesList.forEach(data => {\n data.delSelected = event;\n });\n this._pictureListeChange();\n }\n\n onToggleDelSelection(index: number) {\n if (this.disable) {\n return;\n }\n this.picturesList[index].delSelected = !this.picturesList[index].delSelected;\n this._pictureListeChange();\n }\n\n /** Event emit each time filters change */\n onFiltersChange() {\n this.filtersChange.emit();\n }\n\n onEdit(picture: ImgPictureDTO) {\n this.imgEventCardService.emitImgToEdit(picture);\n }\n\n onToggleSelectImg(index: number) {\n if (this.disable || this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n onRemoveImg(picture: ImgPictureDTO) {\n picture.deleted = true;\n this.imgManager.removeImg(picture.id_file).subscribe(\n data => {\n this.imgEventCardService.emitImgRemoved(picture.id_file);\n this.imgSelectionService.removeImgSelectedById(picture.id_file);\n },\n error => {\n const msg = error.status === 409 ? this.errorAlreadyUsedImg: this.errorRemoveImg;\n picture.deleted = false;\n this.alertService.openAlert(msg);\n });\n }\n\n onPictureNotLoading(event) {\n event.target.src = this.fakeImgRoute;\n }\n\n onDownloadImg(display_name: string, file_name: string) {\n this.http.get(this.getRAWImgRoute(file_name), { responseType: 'blob' }).subscribe(val => {\n let url = URL.createObjectURL(val);\n this.downloadUrl(url, display_name);\n URL.revokeObjectURL(url);\n });\n }\n\n onNameChange(id_file: string) {\n this.pictureNameChange.emit({id: id_file, previousName: this.previousName});\n }\n\n private getRAWImgRoute(file_name: string){\n return this.imgCDNService.getUrlImg('raw') + file_name;\n }\n\n private _pictureListeChange() {\n this.picturesListChange.emit();\n }\n\n private downloadUrl(url: string, fileName: string) {\n const a: any = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n }\n\n ngDestroy() {\n if (this.getDataAPISub) {\n this.getDataAPISub.unsubscribe();\n }\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgEventService } from '../../../../services/img-event.service';\nimport { ImgPictureDTO } from '../../../../dto/img-manager.dto';\nimport { HttpClient } from '@angular/common/http';\nimport { ImgManagerService } from '../../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../../services/img-selection.service';\nimport { ImgCDNService } from '../../../../services/config/img-cdn.service';\nimport { ImgManagerConfigService } from '../../../../services/config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ImagesActionHandler } from '../../images-actions-handler';\nimport { easeInOut } from '../../../../animations/easeInOut/ease-in-out.animation'\nimport { tabDisplayed } from '../../../../dto/export-dtos.api';\nimport { AlertService } from '../../../../services/alert.service';\n\n@Component({\n selector: 'img-card',\n templateUrl: './img-card.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgCardComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n picture: ImgPictureDTO;\n @Input()\n index: number;\n focusInput = false;\n\n @Output()\n toggleImgSelected: EventEmitter<void> = new EventEmitter();\n\n isUploadSection: boolean = false;\n activeConfirmDelete = false;\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n this.isUploadSection = this.tabDisplayed === 'img-upload';\n }\n\n onToggleImgSelected() {\n this.toggleImgSelected.next();\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\n\n@Component({\n selector: 'img-editor',\n templateUrl: './img-editor.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgEditorComponent implements OnInit {\n\n @Input()\n stateDisplayed;\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Output() editClosed = new EventEmitter();\n\n isLoading: boolean = false;\n isImgModified: boolean = false;\n isNameModified: boolean = false;\n currentCroppedImage: string = ''; // Img modified return in base64 by the cropper\n private previousName: string;\n\n msgFailSave: string = 'ImgManager.ImgEditor.msgFailSave';\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n msgSuccessEdit: string = \"Les modifications de l'image ont bien été enregistrées.\"\n\n constructor(\n private imgManagerService: ImgManagerService,\n ) { }\n\n ngOnInit(): void {\n this.previousName = this.imgToEdit.display_name;\n }\n\n onSave() {\n if (this.isLoading) {\n return;\n }\n this.isLoading = true;\n\n if (!this.isImgModified && !this.isNameModified) {\n this.isLoading = false;\n this.onEditClosed();\n }\n\n const obsReplaceImg: Observable<any> = this.imgManagerService.replaceImg(this.currentCroppedImage, this.imgToEdit.id_file);\n const obsChangeImgName: Observable<any> = this.imgManagerService.changeImgName(this.imgToEdit.display_name, this.imgToEdit.id_file);\n\n if(this.isImgModified && this.isNameModified) {\n this.ranameAndReplaceImg(obsChangeImgName, obsReplaceImg);\n return;\n }\n\n if(this.isImgModified){\n obsReplaceImg.subscribe(data => {\n this.isLoading = false;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.currentCroppedImage = '';\n this.onEditClosed(this.msgFailSave);\n });\n return;\n }\n\n if (this.isNameModified) {\n obsChangeImgName.subscribe(data => {\n this.isLoading = false;\n this.previousName = this.imgToEdit.display_name;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.imgToEdit.display_name = this.previousName;\n this.onEditClosed(this.msgFailSave);\n });\n }\n this.isNameModified = false;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestartEdit() {\n this.isImgModified = false;\n this.isNameModified = false;\n this.imgToEdit.display_name = this.previousName;\n }\n\n onCancel() {\n this.onEditClosed('');\n }\n\n onImgCropped(imgBase64: string) {\n this.currentCroppedImage = imgBase64;\n }\n\n private ranameAndReplaceImg(obsChangeImgName: Observable<any>, obsReplaceImg: Observable<any>) {\n // Avoid to use forkjoin, because it can create conflict and loos the img\n obsChangeImgName.subscribe(\n res1 => {\n obsReplaceImg.subscribe(\n res2 => {\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n }\n}\n","import {Component, OnInit, Output, EventEmitter, Input, OnDestroy, Inject, Renderer2} from '@angular/core';\nimport { CanvaService } from '../../services/canva.service';\nimport { CanvaButtonApi } from '../../dto/canva.dto';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { WiziBlockMediaDto } from '../../dto/wizi-block-media.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { AlertService } from '../../services/alert.service';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { CanvaCreateDesign } from '../../dto/canva-create-design.dto';\n\n@Component({\n selector: 'canva-btn',\n templateUrl: './canva-btn.component.html'\n})\nexport class CanvaBtnComponent implements OnInit, OnDestroy {\n\n @Input() stateDisplayed: stateDisplayed;\n\n @Output() showImgUploaded = new EventEmitter();\n\n canvaApi: CanvaButtonApi;\n canvaLogoRouteAssets: string;\n imgLoading = false;\n\n availableFormat = {\n 'ImgManager.CanvaBtn.smallSquare' : {\n 'width' : 500,\n 'height' : 500\n },\n 'ImgManager.CanvaBtn.mediumSquare' : {\n 'width' : 1000,\n 'height' : 1000\n },\n 'ImgManager.CanvaBtn.bigSquare' : {\n 'width' : 2500,\n 'height' : 2500\n }\n }\n\n openDropDownMenu: boolean = false;\n\n expectedHeight: number;\n expectedWidth: number;\n subs: Subscription[] = [];\n\n uploadingImg = 'ImgManager.CanvaBtn.uploadingImg';\n successUploadPhoto = 'ImgManager.CanvaBtn.successImport';\n errorUploadCanvaImg = 'ImgManager.CanvaBtn.errorUploadCanvaImg';\n errorRenameCanvaImg = 'ImgManager.CanvaBtn.errorRenameCanvaImg';\n\n constructor(\n private canvaService: CanvaService,\n private imgManager: ImgManagerService,\n private wzImgEventService: ImgEventService,\n private translateService: TranslateService,\n private alertService: AlertService,\n private renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n this.canvaLogoRouteAssets = this.canvaService.getCanvaLogo();\n this.listenCanvaExpectedSize();\n }\n\n listenCanvaExpectedSize() {\n // Subcribe to askImg from wizi-block\n const subExpectedImgSizesChange =\n this.canvaService.bindEventExepectedImgSizeChange().subscribe( (mediaDTO: WiziBlockMediaDto) => {\n if (mediaDTO) {\n this.expectedWidth = parseInt(mediaDTO.image_width, 10);\n this.expectedHeight = parseInt(mediaDTO.image_height, 10);\n } else {\n this.expectedWidth = undefined;\n this.expectedHeight = undefined;\n }\n });\n this.subs.push(subExpectedImgSizesChange);\n }\n\n onOpenCanva(width: number, height: number) {\n if (this.imgLoading) {\n return;\n }\n const subCanvaApi =\n this.canvaService.getCanvaApi().subscribe((api: CanvaButtonApi) => {\n this.canvaApi = api;\n this.addOverflowBody();\n this.createDesign(width, height);\n });\n this.subs.push(subCanvaApi);\n }\n\n private createDesign(width: number, height: number) {\n const createDesign: CanvaCreateDesign = {\n type: 'EtsyShopIcon',\n dimensions : {\n units: 'px',\n width: width ? width : undefined,\n height: height ? height : undefined,\n },\n publishLabel: this.translateService.instant('ImgManager.CanvaBtn.publish'),\n };\n this.canvaApi.createDesign({\n design: createDesign,\n onDesignPublish: ({ exportUrl, designTitle }) => this.designPublished(exportUrl, designTitle),\n onDesignClose: () => {\n this.removeOverflowBody();\n }\n\n });\n }\n\n private designPublished(exportUrl: string, designTitle: string) {\n this.alertService.openAlert(this.uploadingImg);\n this.imgLoading = true;\n\n const subUploadImg =\n this.imgManager.uploadFileByUrl(exportUrl, designTitle).subscribe(\n (img: ImgPictureDTO) => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n this.wzImgEventService.emitImgAdded(img.id_file);\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n if (error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadCanvaImg, error.error.message)\n } else {\n this.alertService.openAlert(this.errorUploadCanvaImg);\n }\n }\n );\n\n this.subs.push(subUploadImg);\n\n }\n\n private addOverflowBody() {\n this.renderer.addClass(document.body, 'ovh-canva');\n }\n\n private removeOverflowBody() {\n this.renderer.removeClass(document.body, 'ovh-canva');\n }\n\n ngOnDestroy() {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport { tabDisplayed } from '../../dto/export-dtos.api';\n\n\n@Component({\n selector: 'img-selection',\n templateUrl: './img-selection.component.html'\n})\nexport class ImgSelectionComponent implements OnInit {\n\n @Input() tabDisplayed: tabDisplayed;\n @Output() imgManagerClosed = new EventEmitter();\n\n imgSelectedList: ImgPictureDTO[] = [];\n removingAll: boolean = false;\n cancellingAll: boolean = false;\n importingAll: boolean = false;\n dragStart = false;\n isLoading: boolean = false;\n trashPositionIndex = 0;\n trashPositionLeft = '-5px';\n\n constructor(\n private imgSelectionService: ImgSelectionService\n ) { }\n\n ngOnInit(): void {\n this.getImgSelected();\n this.imgSelectionService.getImgListLoadingEventListner().subscribe(loading => {\n this.isLoading = loading;\n })\n }\n\n init() {\n this.removingAll = false;\n this.cancellingAll = false;\n this.importingAll = false;\n }\n\n getImgSelected() {\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n removeImg(index: number) {\n this.imgSelectionService.removeImgSelectedByIndex(index);\n }\n\n drop(event: CdkDragDrop<string[]>) {\n if (event.previousIndex !== event.currentIndex) {\n this.imgSelectionService.moveImgOrder(event);\n }\n }\n\n removeImgFromSelection(event: CdkDragDrop<string[]>) {\n this.imgSelectionService.removeImgSelectedByIndex(event.previousIndex);\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[btnLoadingAnim]'\n})\nexport class LoadingDirective {\n\n element: ElementRef;\n currentLoading = 0;\n interval = null;\n\n constructor(el: ElementRef) {\n this.element = el;\n this.launchLoading();\n }\n\n launchLoading() {\n if (this.interval !== null) {\n return;\n }\n this.currentLoading = 10;\n\n this.element.nativeElement.style.width = this.currentLoading + '%';\n\n this.interval = setInterval(() => {\n if (this.currentLoading < 80) {\n this.currentLoading += Math.floor(Math.random() * 15);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n if (this.currentLoading >= 80 && this.currentLoading < 95) {\n this.currentLoading += Math.floor(Math.random() * 2);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n }, 70);\n }\n\n ngOnDestroy() {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n }\n}\n","import { Directive, ElementRef, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { DomService } from '../services/dom.service';\n\n@Directive({\n selector: '[wzAutoHide]'\n})\nexport class AutoHideDirective implements AfterViewInit {\n @Input() triggerElement: string;\n @Input() forceOn: Array<string> = null;\n\n constructor(private _elementRef: ElementRef, private domService: DomService) {}\n\n @Output('clickOutside') clickOutside: EventEmitter<any> = new EventEmitter();\n\n ngAfterViewInit(): void {\n this.domService.documentEvent().subscribe((targetElement: Element) => {\n const clickedInside = this._elementRef.nativeElement.contains(targetElement);\n const classNameFromElement = targetElement.getAttribute('class');\n\n if (!clickedInside && (classNameFromElement === null || !classNameFromElement.includes(this.triggerElement))) {\n this.clickOutside.emit(null);\n }\n\n if (this.forceOn != null && classNameFromElement !== null) {\n let needToClose = true;\n this.forceOn.forEach(v => {\n if (!classNameFromElement.includes(v)) {\n needToClose = false;\n }\n });\n if (needToClose) {\n this.clickOutside.emit(null);\n }\n }\n });\n }\n}\n","import { Directive, Input, Output, EventEmitter, HostListener } from \"@angular/core\";\n\n@Directive({ selector: '[copy-clipboard]' })\nexport class CopyClipboardDirective {\n\n @Input(\"copy-clipboard\")\n public payload: string;\n\n @Output(\"copied\")\n public copied: EventEmitter<string> = new EventEmitter<string>();\n\n @HostListener(\"click\", [\"$event\"])\n public onClick(event: MouseEvent): void {\n\n event.preventDefault();\n if (!this.payload)\n return;\n\n let listener = (e: ClipboardEvent) => {\n let clipboard = e.clipboardData || window[\"clipboardData\"];\n clipboard.setData(\"text\", this.payload.toString());\n e.preventDefault();\n\n this.copied.emit(this.payload);\n };\n\n document.addEventListener(\"copy\", listener, false)\n document.execCommand(\"copy\");\n document.removeEventListener(\"copy\", listener, false);\n }\n}","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'dropdown',\n templateUrl: './dropdown.component.html'\n})\nexport class DropdownComponent implements OnInit {\n\n @Input()\n dropDownMenuClass: string;\n @Input()\n disable: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { EventEmitter } from '@angular/core';\nimport { Output } from '@angular/core';\nimport { Component, OnInit, Input } from '@angular/core';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { AlertService } from '../../../services/alert.service';\n\n@Component({\n selector: 'info-section',\n templateUrl: './info-section.component.html'\n})\nexport class EditorInfoSectionComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isNameModified(isNameModified: boolean) {\n this._isNameModified = isNameModified;\n }\n get isNameModified(): boolean {\n return this._isNameModified;\n }\n private _isNameModified: boolean = false;\n\n @Output()\n isNameModifiedChange = new EventEmitter<boolean>();\n\n imgName: string;\n imgRoute: string;\n\n msgCopyToClipBoard: string = 'ImgManager.ImgEditor.copytoClipBoard';\n\n constructor(\n private alertService: AlertService,\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgName = this.imgToEdit.display_name;\n }\n getFileSize() {\n return this.imgToEdit ? Math.round(parseInt(this.imgToEdit.size)/1000) : '-';\n }\n\n copyToClipBoard(event) {\n this.alertService.openAlert(this.msgCopyToClipBoard);\n }\n\n onNameChange() {\n this.isNameModifiedChange.emit(true);\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\n\nexport const insertRemove = // the fade-in/fade-out animation.\ntrigger('insertRemoveAnnim', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('0.5s ease-in-out', style({ opacity: 1 })),\n ])\n]);\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper';\nimport { insertRemove } from '../../../animations/insertRemove/insert-remove.animation';\nimport { CropperConfigDTO, ImgCropperConfigDTO } from '../../../dto/img-editor-config.dto';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\n\n@Component({\n selector: 'cropper',\n templateUrl: './cropper.component.html',\n animations: [\n insertRemove\n ]\n})\nexport class CropperComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isImgModified(isImgModified: boolean) {\n this._isImgModified = isImgModified;\n if (!isImgModified) {\n this.restartEdit();\n }\n }\n get isImgModified(): boolean {\n return this._isImgModified;\n }\n private _isImgModified: boolean = false;\n\n @Output()\n isImgModifiedChange = new EventEmitter<boolean>();\n\n @Output()\n editClosed = new EventEmitter();\n\n @Output()\n currentCroppedImageChange = new EventEmitter<string>();\n\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n\n\n isNameModified: boolean = false;\n isCropperReady: boolean = false; // Use to not display the crop validation btn, after the img is loaded or changed\n currentCroppedImage: string = ''; // Img modified return in base64\n isCropped: boolean = false;\n isLoading: boolean = false;\n isImgCropped: boolean = false;\n isImgCroppedInitilized: boolean = false;\n\n // Image Cropper properties\n imgType: string;\n imgRoute: string;\n imageChangedEvent: any = '';\n croppedImage: any = '';\n canvasRotation = 0;\n rotation = 0;\n scale = 1;\n showCropper = false;\n containWithinAspectRatio = false;\n transform: ImageTransform = {};\n\n defaultAspectRatio: number;\n\n // dropdown list\n resolutionConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.origin',\n config: {\n maintainAspectRatio: true\n },\n },\n {\n label: 'ImgManager.ImgEditor.config.free',\n config: {\n maintainAspectRatio: false\n },\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.square',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 1 / 1\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.Portrait',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 3 / 4\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.landscape',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 5 / 3\n }\n }\n ];\n\n rotationConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.schedule',\n icon: \"fal fa-redo-alt\",\n method: \"rotateRight\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.AntiSchedule',\n icon: \"fal fa-undo-alt\",\n method: \"rotateLeft\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipVert',\n icon: \"fal fa-sort-alt\",\n method: \"flipVertical\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipHoriz',\n icon: \"fal fa-exchange-alt\",\n method: \"flipHorizontal\"\n }\n ];\n\n zoomConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.zoom',\n icon: \"fal fa-search-plus\",\n method: \"zoomIn\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.dezoom',\n icon: \"fal fa-search-minus\",\n method: \"zoomOut\"\n }\n ];\n\n // Img cropper variables\n imgCropperConfig:CropperConfigDTO = {\n maintainAspectRatio: false,\n aspectRatio: undefined\n }\n\n constructor(\n private imgCDNService: ImgCDNService\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgRoute = this.getRAWImgRoute();\n this.imgType = this.getImgType();\n this.croppedImage = null;\n this.setDefautAspectRatio();\n }\n\n getRAWImgRoute(){\n return this.imgCDNService.getUrlImg('raw') + this.imgToEdit.file_name;\n }\n\n getImgType() {\n return this.imgToEdit.file_name ? this.imgToEdit.file_name.split('.').pop() : undefined;\n }\n\n setDefautAspectRatio() {\n const height = parseInt(this.imgToEdit.raw_height);\n const width = parseInt(this.imgToEdit.raw_width);\n this.defaultAspectRatio = height / width;\n this.resolutionConfig[0].config.aspectRatio = this.defaultAspectRatio;\n this.imgCropperConfig.aspectRatio = this.defaultAspectRatio;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestart() {\n this.isImgModifiedChange.emit(false);\n }\n\n restartEdit() {\n this.init();\n this.resetConfCropper();\n }\n\n onImgModified() {\n this.isImgModified = true;\n this.isImgModifiedChange.emit(true);\n }\n\n ////// Img cropper methods ////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n /* Cropper output events */\n\n fileChangeEvent(event: any): void {\n this.imageChangedEvent = event;\n }\n\n imageCropped(event: ImageCroppedEvent) {\n this.detectImgCropperChange();\n\n this.currentCroppedImage = event.base64;\n this.currentCroppedImageChange.emit(this.currentCroppedImage);\n }\n\n imageLoaded() {\n this.showCropper = true;\n }\n\n cropperReady() {\n this.isCropperReady = true;\n }\n\n loadImageFailed() {\n this.onEditClosed(this.msgFailLoad);\n }\n\n /* Resize functions */\n\n changeResolutionSize(index: number) {\n this.setActiveItem(this.resolutionConfig, index);\n const config = this.resolutionConfig[index].config;\n this.setCropperProperties(config);\n }\n\n confirmCrop() {\n this.imgRoute = null;\n this.croppedImage = this.currentCroppedImage;\n this.isImgCropped = false;\n this.isImgCroppedInitilized = false;\n this.resetConfCropper();\n this.onImgModified();\n }\n\n resetConfCropper() {\n this.scale = 1;\n this.rotation = 0;\n this.canvasRotation = 0;\n this.transform = {};\n }\n\n private setActiveItem(array:any[], index: number) {\n // Set active-item class for the dropdown\n array.forEach((item, indexItem) => {\n item.active = indexItem === index ? true : false;\n });\n }\n\n private setCropperProperties(config: any) {\n for (const property in config) {\n this.imgCropperConfig[property] = config[property];\n }\n }\n\n private detectImgCropperChange() {\n this.isImgCropped = this.isImgCroppedInitilized;\n this.isImgCroppedInitilized = true;\n }\n\n /* Rotations functions */\n\n rotateLeft() {\n this.canvasRotation--;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n rotateRight() {\n this.canvasRotation++;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n flipHorizontal() {\n this.transform = {\n ...this.transform,\n flipH: !this.transform.flipH\n };\n this.onImgModified();\n }\n\n flipVertical() {\n this.transform = {\n ...this.transform,\n flipV: !this.transform.flipV\n };\n this.onImgModified();\n }\n\n private flipAfterRotate() {\n const flippedH = this.transform.flipH;\n const flippedV = this.transform.flipV;\n this.transform = {\n ...this.transform,\n flipH: flippedV,\n flipV: flippedH\n };\n }\n\n /* Zoom functions */\n\n zoomOut() {\n this.scale -= this.scale < 0.2? 0 : .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n zoomIn() {\n this.scale += .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n applyMethod(method: string) {\n this[method](); // call the method contains in zoomConfig or rotationConfig\n }\n}\n","import { Component, OnInit, Input, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { ImgPictureDTO, ImgPicturesDTO, ParamsImgManagerDTO } from '../../dto/img-manager.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Subscription, Subject} from 'rxjs';\nimport { debounceTime, take } from 'rxjs/operators';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { UserSettingsService } from '../../services/user-settings.service';\nimport { TableFilters } from '../../services/table/filters-table.service';\nimport { PictureNameUpdate } from '../../dto/picture-name-update.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { insertRemove } from '../../animations/insertRemove/insert-remove.animation';\nimport { stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'images-view',\n templateUrl: './images-view.component.html',\n animations: [\n easeInOut,\n insertRemove\n ]\n})\nexport class ImagesViewComponent implements OnInit, AfterViewInit {\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() fullSize: boolean;\n @Input() maxLengthCardShow: number;\n @Input() listDisplayed = false; // Display format list or mosaic\n @Input() multipleImgMode = false;\n\n // Data filters\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 1\n };\n\n @ViewChild('imgLibContainer') imgLibContainer : ElementRef;\n widthLargeCard: number = 219; // Default value of a card width 199 + margin 20\n widthSmallCard: number = 160; // Default value of a card width 140 + margin 20\n nbMinImgPerLine: number;\n nbMaxImgPerLine: number;\n nbFakeImg: number = 0;\n\n imgFullWidthConfig:any = [\n {\n max: 419,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 499,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 719, // tablet\n largeImgWidthFactor : 0.5,\n smallImgWidthFactor : 0.3333\n },\n {\n max: 1023, // deskop\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.2,\n smallImgWidthFactor : 0.1111\n },\n {\n largeImgWidthFactor : 0.1666,\n smallImgWidthFactor : 0.1\n }\n ];\n\n imgWidthConfig:any = [\n {\n max: 1024,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1199,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1299,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.14\n },\n {\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n }\n ];\n\n imgSubscribe: Subscription;\n imgRemovedEvent: Subscription;\n imgAddedEvent: Subscription;\n imgSelectionChange: Subscription;\n searchQueryChanged: Subject<string> = new Subject<string>();\n filtersChanged: Subject<void> = new Subject<void>();\n\n picturesList: ImgPictureDTO[] = [];\n savePictureList: ImgPictureDTO[] = [];\n imgSelectedList: ImgPictureDTO[];\n searchedValue: string; // Value from the search bar or img added by canva\n nbImgToDelSelected: number = 0;\n disable: boolean = false; // Use to disable action during server request\n isLoading: boolean = true;\n isTotalRetieved: boolean = false;\n delListImgLoader = false;\n initComponent: boolean = true;\n failLoaded: boolean = false;\n displayPexelsResults: boolean = false; // Use when no img find by name, display img from Pexels\n searchText: string;\n confirmImgSup:boolean = false;\n previousSearchValue: string;\n\n // Paginator Params\n pageIndex: number =0;\n length: number = 0;\n pageSize: number = 30; // Default value\n pageSizeOptions: number[] = [25, 50, 100, 250];\n\n // Api Img manager Params\n params:ParamsImgManagerDTO;\n\n private errorGetAllImg = 'ImgManager.ImgLib.errorGetAllImg';\n private errorGetTotalImg = 'ImgManager.ImgLib.errorGetTotalImg';\n private errorGetImg = 'ImgManager.ImgLib.errorGetCanvaImg';\n private msgNoImgFound = 'ImgManager.ImgLib.noImgFound';\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n\n constructor(\n private imgManager: ImgManagerService,\n private imgEventService: ImgEventService,\n private imgSelectionService: ImgSelectionService,\n private alertService: AlertService,\n private userSettingsService: UserSettingsService,\n private renamePictureService: RenamePictureService) { }\n\n ngOnInit(): void {\n if (this.maxLengthCardShow) {\n this.reducePictureListMaxLength();\n }\n this.setEvents();\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n ngAfterViewInit() {\n this.setNbImgToDisplay();\n this._getImgList();\n if (!this.savePictureList) {\n this.savePictureList = this.picturesList;\n }\n }\n\n reducePictureListMaxLength() {\n this.picturesList.splice(0, this.maxLengthCardShow);\n }\n\n getImgList() {\n this.filtersChanged.next();\n }\n\n /**\n * true : go to list display\n * false : go to mosaic display\n * @param activate\n */\n onSwitchFormatDisplayed(activate: boolean) {\n this.listDisplayed = activate;\n this.userSettingsService.setUserDisplayPreference(activate);\n this.imgEventService.emitlistDisplayedChange(activate);\n }\n\n /**\n * Calcul the number of img selected for masse deletion\n */\n onImgSelected() {\n this.setNbImgToDelSelected();\n }\n\n onShowImgUploaded() {\n this.searchText = null;\n this.searchedValue = null;\n this.getImgList();\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n removeListImg() {\n if (this.disable) {\n return;\n }\n this.disable = true;\n this.delListImgLoader = true;\n this.confirmImgSup = false;\n\n // Get the id of the img to remove\n // And add deleted property\n const idImgToRemove: string[] = [];\n this.picturesList.forEach( img => {\n if (img.delSelected) {\n img.deleted = true;\n idImgToRemove.push(img.id_file);\n }\n });\n\n this.imgManager.removeMultipleImg(idImgToRemove).subscribe(\n () => {\n this.getImgList();\n this.imgSelectionService.removeImgSelectionByIds(idImgToRemove);\n },\n error => {\n this.getImgList();\n this.alertService.openAlert(this.errorRemoveImg);\n }\n );\n\n\n }\n\n selectImgChosen() {\n if (this.disable) {\n return;\n }\n const picturesListSelected: ImgPictureDTO[] = [];\n this.picturesList.map(img => {\n if(img.delSelected) {\n img.delSelected =false;\n img.selected = true;\n }\n if (img.selected) {\n picturesListSelected.push(img);\n }\n });\n this.setNbImgToDelSelected();\n this.imgSelectionService.setImgSelection(picturesListSelected);\n }\n\n displayConfirmImgSup(){\n if (this.disable) {\n return;\n }\n this.confirmImgSup = true;\n }\n\n cancelSup() {\n this.confirmImgSup = false;\n }\n\n /**\n * Event emit when a img selected in order to delete\n */\n onPicturesListChange() {\n this.setNbImgToDelSelected();\n }\n\n onFiltersChange() {\n this.getImgList();\n }\n\n /**\n * Set default number of img per page to display at the initialisation\n * This number is between 30 and 50\n */\n private setNbImgToDisplay() {\n const containerWidth = this.imgLibContainer.nativeElement.offsetWidth + 30; // + 30px -> left + right margin\n const scrollWidth = window.innerWidth - document.body.offsetWidth;\n\n const [maxImgWidthFactor, minImgWidthFactor] = this.getImgWidthFactors();\n\n const minImgWidth = Math.floor(containerWidth * minImgWidthFactor);\n const maxImgWidth = Math.ceil((containerWidth + scrollWidth ) * maxImgWidthFactor);\n\n this.nbMaxImgPerLine = Math.floor(containerWidth / minImgWidth);\n this.nbMinImgPerLine = Math.floor( (containerWidth + scrollWidth ) / maxImgWidth);\n\n this.pageSize = this.getTotalImgPerPage();\n }\n\n private getImgWidthFactors(): number[] {\n const screenWidth = window.innerWidth;\n let minWidth:number = 0;\n let imgSizesConfig: number[] = [];\n\n const currentImgWidthConfig = this.fullSize ? this.imgFullWidthConfig : this.imgWidthConfig;\n\n for (const widthConfig of currentImgWidthConfig) {\n if (!widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n if (minWidth < screenWidth && screenWidth <= widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n minWidth = widthConfig.max;\n }\n return imgSizesConfig;\n }\n\n private getTotalImgPerPage(): number {\n let total = this.nbMinImgPerLine;\n\n while (total < 30 || total % this.nbMaxImgPerLine !== 0 || total % this.nbMinImgPerLine !== 0) {\n total += this.nbMinImgPerLine;\n }\n return total;\n }\n\n private setParams() {\n this.params = {\n limit: this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage.toString() : this.pageSize.toString(),\n page: this.tableFilters.currentPage.toString()\n };\n if (this.tableFilters.searchValue) {\n this.params[\"display_name:contains\"] = this.tableFilters.searchValue.toString();\n }\n }\n\n private initVariables(loadingSuccess: boolean) {\n this.nbImgToDelSelected = 0;\n this.disable = false;\n this.isLoading = false;\n this.delListImgLoader = false;\n this.initComponent = false;\n this.displayPexelsResults = false;\n this.failLoaded = !loadingSuccess;\n this.nbFakeImg = 0;\n }\n\n private selectImgSelected () {\n if (!this.imgSelectedList || !this.imgSelectedList.length) {\n return;\n }\n\n const idImgSlectedList: string[] = [];\n\n this.imgSelectedList.forEach(img =>\n idImgSlectedList.push(img.id_file)\n );\n\n this.picturesList.forEach(picture => {\n if (idImgSlectedList.indexOf(picture.id_file) !== -1) {\n picture.selected = true;\n }\n });\n }\n\n private displayPexelsLib () {\n this.displayPexelsResults = true;\n this.alertService.openAlert(this.msgNoImgFound);\n }\n\n /**\n * Set a img list in order to fill properly all the line of images displayed in mosaic.\n * Otherwise, the space-between css will do a bad display\n */\n private calculNbImgFake(nbImgDisplayed: number) {\n const nbImgPerLine = this.stateDisplayed === 'small' || this.tabDisplayed === 'img-upload' ? this.nbMaxImgPerLine : this.nbMinImgPerLine;\n\n if (nbImgDisplayed % nbImgPerLine !== 0) {\n this.nbFakeImg = nbImgPerLine - nbImgDisplayed % nbImgPerLine;\n }\n }\n\n private getImg (id_file: string) {\n this.imgManager.getShopImg(id_file).pipe(take(1)).subscribe(\n (picture: ImgPictureDTO) => {\n\n if (!this.imgAlreadyExist(picture.id_file)) {\n // check the img is not already present\n this.picturesList.unshift(picture);\n this.length += 1;\n }\n },\n error => {\n this.alertService.openAlert(this.errorGetImg);\n }\n );\n }\n\n private imgAlreadyExist (id_file: string): boolean {\n for (const img of this.picturesList) {\n if (img.id_file === id_file) {\n return true;\n }\n }\n return false;\n }\n\n private setNbImgToDelSelected () {\n this.nbImgToDelSelected = this.picturesList.filter(img =>\n img.delSelected).length;\n\n if (!this.nbImgToDelSelected) {\n this.confirmImgSup = false;\n }\n }\n\n private setEvents() {\n // Add a timer to retrieve img when the search bar or the paginator are used\n this.searchQueryChanged\n .pipe(debounceTime(400)) // wait 0.5 sec after the last event before emitting last event\n .subscribe(data => {\n this.getImgList();\n });\n\n this.filtersChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe(data => {\n this._getImgList();\n });\n\n // Reload img when img is/are removed\n this.imgRemovedEvent = this.imgEventService.getImgRemovedEventListner().subscribe(id_file =>{\n this.getImgList();\n });\n\n // Create img from Canva\n this.imgAddedEvent = this.imgEventService.getImgAddedEventListner().subscribe(id_file =>{\n if (id_file && !this.imgAlreadyExist(id_file)) {\n this.getImg(id_file);\n }\n });\n\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n if (this.listDisplayed) {\n return;\n }\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n\n private _getImgList() {\n this.isLoading = true;\n this.displayPexelsResults = false;\n this.setParams();\n\n this.refreshTotalImgList();\n\n this.imgManager.getShopImgList(this.params).pipe(take(1)).subscribe((data: ImgPicturesDTO) => {\n this.initVariables(true);\n const nbImgDisplayed = data.data.length;\n this.calculNbImgFake(nbImgDisplayed);\n this.picturesList = data.data;\n this.renamePictureService.setPicturesList(this.picturesList);\n this.selectImgSelected();\n\n this.length = this.isTotalRetieved ? this.length : data.totalRecords;\n this.tableFilters.totalItems = this.isTotalRetieved ? this.tableFilters.totalItems : data.totalRecords;\n this.tableFilters.itemsPerPage = this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage : this.pageSize;\n\n if (this.maxLengthCardShow) {\n this.picturesList = this.picturesList.splice(0, 8);\n }\n\n // Display Pexels if no result\n if (data.totalRecords === 0) {\n this.displayPexelsLib();\n }\n\n },\n error => {\n this.alertService.openAlert(this.errorGetAllImg);\n this.initVariables(false);\n });\n }\n\n private refreshTotalImgList() {\n const searchValue = this.tableFilters.searchValue;\n\n if (this.isTotalRetieved && searchValue === this.previousSearchValue) {\n // Keep current total result\n return;\n }\n\n this.isTotalRetieved = false;\n\n this.imgManager.getShopTotalImgList(this.params).pipe(take(1)).subscribe(\n\n (data: ImgPicturesDTO) => {\n this.previousSearchValue = searchValue;\n this.isTotalRetieved = true;\n this.length = data.totalRecords;\n this.tableFilters.totalItems = data.totalRecords;\n },\n\n error => {\n //this.alertService.openAlert(this.errorGetTotalImg);\n this.initVariables(false);\n });\n }\n\n ngOnDestroy(): void {\n this.searchQueryChanged.unsubscribe();\n this.imgRemovedEvent.unsubscribe();\n this.imgAddedEvent.unsubscribe();\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { PictureNameUpdate, tabDisplayed } from '../../../dto/export-dtos.api';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'mosaic-view',\n templateUrl: './mosaic-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class MosaicViewComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n nbFakeImg: number= 0;\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n }\n\n onSearchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.filtersChange.emit(this.tableFilters);\n }\n\n onCardRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChange.next(pictureRenamed);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'table-view',\n templateUrl: './table-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class TableViewComponent extends ImagesActionHandler implements OnInit {\n dataTableName: string = 'imgagesView'; // Name of your table\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { NwbFilterGroup, NwbFilterRoutingBuilder } from '@wizishop/ng-wizi-bulma';\nimport { Subject } from 'rxjs';\nimport { PaginationFilters } from '../../components/shared/pagination/pagination.component';\n\nexport interface TableFilters extends PaginationFilters {\n sort: string;\n order: boolean;\n searchValue: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FiltersTableService {\n filterGroups = new Map<string, NwbFilterGroup>();\n dataTableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: undefined,\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 0\n };\n\n private sortSubject: Subject<any> = new Subject<any>();\n\n constructor(private filterRoutingBuilder: NwbFilterRoutingBuilder) {}\n\n getTableFilterGroup(dataTableName: string) {\n if (this.filterGroups.has(dataTableName)) {\n return this.filterGroups.get(dataTableName);\n }\n const filterGroup: NwbFilterGroup = this.filterRoutingBuilder.group(this.dataTableFilters, dataTableName);\n this.filterGroups.set(dataTableName, filterGroup);\n return filterGroup;\n }\n\n /**\n * Use to reset the others sorts of the table\n * @param dataTableName\n * @param sortName\n * @param order\n */\n emitSortChange(dataTableName: string, sortName: string, order: boolean) {\n this.sortSubject.next({ dataTableName, sortName, order });\n }\n\n getSortChangeListner() {\n return this.sortSubject.asObservable();\n }\n\n setPaginationFilters(dataTableName: string, totalItems: number, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage,\n currentPage\n });\n }\n\n setInitialPaginationFiltersIfNotExist(dataTableName: string, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage: filterGroup.get('itemsPerPage') ? parseInt(filterGroup.get('itemsPerPage')) : itemsPerPage,\n currentPage: filterGroup.get('currentPage') ? parseInt(filterGroup.get('currentPage')) : currentPage\n });\n }\n}","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { TableFilters, FiltersTableService } from '../../../services/table/filters-table.service';\n\n@Component({\n selector: 'wz-table',\n templateUrl: './table.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class TableComponent implements OnInit {\n /// Input/Output of table filters ///\n\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n @Input() tableRoutingName: string; // Name of the table\n @Input() placeholder: string = '';\n\n private _filterGroup: NwbFilterGroup;\n\n /// Input/Output of checkbox ///\n\n /** Pass to true to display checkbox in the header table */\n @Input() checkbox = false;\n /** Emit new header checboxValue */\n @Output() toggleAllCheckBox: EventEmitter<boolean> = new EventEmitter();\n\n /// Input to disable section ///\n\n /** Pass to true to hide search input */\n @Input() disableSearch: boolean = false;\n /** Pass to true to hide the pagniator */\n @Input() disablePagniation: boolean = false;\n\n /// Input for loader on table body ///\n @Input() isLoading = false;\n\n /// Private variables ///\n headerCheckBoxId: string;\n private filterGroupChangeSub: Subscription;\n\n constructor(private filtersTableService: FiltersTableService) {}\n\n ngOnInit(): void {\n this.headerCheckBoxId = uuid(); // Create checkbox unique id\n\n /* Handle routing filters */\n if (this.tableRoutingName) {\n this._filterGroup = this.filtersTableService.getTableFilterGroup(this.tableRoutingName);\n\n // Performe initial fetch data\n this._filterGroup.valuesChange$.next([]);\n\n this.setTablesFilters();\n\n // Listen to filters changes with debounced time to limit multiple api calls\n this.filterGroupChangeSub = this._filterGroup.valuesChange$.subscribe(filters => {\n this.setTablesFilters();\n });\n }\n }\n\n onToggleAllCheckBox(event) {\n this.toggleAllCheckBox.emit(event.target.checked);\n }\n\n searchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n\n // Reset routing filters\n if (this._filterGroup) {\n this._filterGroup.setValues({\n searchValue: this.tableFilters.searchValue,\n sort: undefined,\n order: undefined,\n currentPage: 1\n });\n }\n }\n\n pageChange() {\n this.tableFiltersChange.emit(this.tableFilters);\n if (this._filterGroup) {\n this._filterGroup.setValues({\n itemsPerPage: this.tableFilters.itemsPerPage,\n currentPage: this.tableFilters.currentPage\n });\n }\n }\n\n /**\n * Set tableFilters from routing data existing in the url\n * */\n private setTablesFilters() {\n this.tableFilters = {\n sort: this._filterGroup.get('sort'),\n order: this._filterGroup.get('order'),\n searchValue: this._filterGroup.get('searchValue'),\n itemsPerPage: this._filterGroup.get('itemsPerPage') ? parseInt(this._filterGroup.get('itemsPerPage')) : 0,\n currentPage: this._filterGroup.get('currentPage') ? parseInt(this._filterGroup.get('currentPage')) : 0,\n totalItems: this.tableFilters.totalItems\n };\n this.tableFiltersChange.emit(this.tableFilters);\n }\n\n ngDestroy() {\n if (this.filterGroupChangeSub) {\n this.filterGroupChangeSub.unsubscribe();\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-input-search',\n templateUrl: './input-search.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: InputSearchComponent, multi: true }]\n})\nexport class InputSearchComponent implements ControlValueAccessor {\n @Input()\n placeholder = '';\n @Input()\n smallPadding = false;\n @Input()\n id;\n private innerValue: any = '';\n @Output() changeDebounced = new EventEmitter<any>(); // debounced\n\n private onTouchedCallback: () => void = () => {};\n private onChangeCallback: (_: any) => void = () => {};\n\n get value(): any {\n return this.innerValue;\n }\n\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n this.onChangeCallback(v);\n }\n }\n\n writeValue(value: any) {\n if (value !== this.innerValue) {\n this.innerValue = value;\n }\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public handleDebouncedKeyUp(event): void {\n this.changeDebounced.emit(event.target.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'IsLastPage'\n})\nexport class PagniationIsLastPage implements PipeTransform {\n /**\n * Return true, if the current page is the last page. Otherwise, return false.\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): boolean {\n if (!(currentPage >= 0 && totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('currentPage or totalItems or itemsPerPage is/are missing in PagniationIsLastPage pipe.');\n }\n return currentPage === Math.ceil(totalItems / itemsPerPage);\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PagniationIsLastPage } from '../../../pipes/pagination/total-pages/is-last-page.pipe';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-pagination',\n templateUrl: './pagination.component.html'\n})\nexport class PaginationComponent {\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Output() pageChange: EventEmitter<PaginationFilters> = new EventEmitter();\n\n constructor() {}\n\n decrementPage() {\n if (this.pagination.currentPage <= 1) {\n return;\n }\n this.pagination.currentPage--;\n this.pageChange.emit(this.pagination);\n }\n\n incrementPage() {\n const isLastPage = new PagniationIsLastPage().transform(\n this.pagination.currentPage,\n this.pagination.totalItems,\n this.pagination.itemsPerPage\n );\n if (isLastPage) {\n return;\n }\n this.pagination.currentPage++;\n this.pageChange.emit(this.pagination);\n }\n\n onGotoPageChange(pageNumber) {\n this.pagination.currentPage = parseInt(pageNumber);\n this.pageChange.emit(this.pagination);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ArrayTotalPages'\n})\nexport class PagniationArrayTotalPages implements PipeTransform {\n /**\n * Return an incremental array corresponding with the number page\n * [ 1, 2, 3 ..., last page number ]\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n const arrayLength: number = Math.ceil(totalItems / itemsPerPage);\n return Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => x + 1);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'customPagniationText'\n})\nexport class PagniationText implements PipeTransform {\n constructor(private translateService: TranslateService) {}\n\n /**\n * Update pagination text if at least one entrie change\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): any {\n let currentItemsLow = 0,\n currentItemsHigh = 0;\n\n if (totalItems) {\n currentItemsLow = (currentPage - 1) * itemsPerPage + 1;\n currentItemsHigh = currentPage * itemsPerPage;\n }\n\n if (currentItemsHigh > totalItems) {\n currentItemsHigh = totalItems;\n }\n\n return this.translateService.instant('PaginationComponent.on', { low: currentItemsLow, high: currentItemsHigh, total: totalItems });\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-checkbox',\n templateUrl: './checkbox.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true }]\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n @Input()\n label = '';\n @Input()\n value: any;\n @Input()\n type: string;\n @Input()\n alone = false;\n @Input()\n checked = false;\n @Input()\n id = '';\n @Input()\n name: string;\n disabled = false;\n constructor() {}\n private _onChange: Function;\n private _onTouched: Function;\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n writeValue(obj: any): void {\n this.value = obj;\n }\n\n onChange(value) {\n if (this._onChange) {\n this._onChange(value);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ComponentFactoryResolver,\n EventEmitter,\n Inject,\n Output,\n Renderer2,\n Directive,\n ElementRef,\n Input,\n ComponentRef,\n ApplicationRef,\n EmbeddedViewRef,\n Injector,\n Type\n} from '@angular/core';\n\nimport { v4 as uuid } from 'uuid';\nimport { CheckboxComponent } from '../../components/shared/checkbox/checkbox.component';\n\n@Directive({\n selector: '[checkBoxRow]'\n})\nexport class CheckBoxRow {\n @Input('checkBoxId') checkBoxId: string | number;\n @Input('checkBoxName') checkBoxName: string;\n\n @Input('checkBoxValue') set checkBoxValue(value: boolean) {\n this._value = value;\n if (this.checkboxComponentRef) {\n this.setCheckBoxValue();\n }\n }\n _value: boolean;\n get checkBoxValue(): boolean {\n return this._value;\n }\n\n @Output() checkBoxValueChange: EventEmitter<boolean> = new EventEmitter();\n\n private checkboxComponentRef: ComponentRef<CheckboxComponent>;\n private htmlContainer: HtmlContainer;\n\n constructor(\n private currentRow: ElementRef,\n private appRef: ApplicationRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private resolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n ngOnInit() {\n this.createCheckBoxComponent();\n this.handleChecboxInputs();\n this.handleCheckboxOutputs();\n }\n\n createCheckBoxComponent() {\n // Create the container\n const checkBoxContainer = document.createElement('div');\n checkBoxContainer.className = 'wz-table__body__line__cell wz-table__body__line__cell--checkbox';\n\n // Insert divCheckBox in the DOM as the first child of the row\n this.renderer.insertBefore(this.currentRow.nativeElement, checkBoxContainer, this.currentRow.nativeElement.firstChild);\n\n // Insert the CheckBoxComponent inside the container (DOM and Angular DOM)\n this.htmlContainer = new HtmlContainer(checkBoxContainer, this.appRef, this.resolver, this.injector);\n this.checkboxComponentRef = this.htmlContainer.attach(CheckboxComponent);\n }\n\n private handleChecboxInputs() {\n this.checkboxComponentRef.instance.id = this.checkBoxId ? this.checkBoxId : uuid();\n this.checkboxComponentRef.instance.name = this.checkBoxName ? this.checkBoxName : undefined;\n this.checkboxComponentRef.instance.alone = true;\n this.setCheckBoxValue();\n }\n\n private setCheckBoxValue() {\n this.checkboxComponentRef.instance.value = this.checkBoxValue;\n }\n\n private handleCheckboxOutputs() {\n // Detect checkbox changes\n this.checkboxComponentRef.instance.registerOnChange(() => {\n this._toggleCheckbox();\n });\n }\n\n private _toggleCheckbox() {\n this.checkBoxValue = !this.checkBoxValue;\n this.checkBoxValueChange.emit(this.checkBoxValue);\n }\n\n ngOnDestroy() {\n this.htmlContainer.dispose();\n }\n}\n\nexport class HtmlContainer {\n private attached: boolean = false;\n\n private disposeFn: () => void;\n\n constructor(\n private hostElement: Element,\n private appRef: ApplicationRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n attach(component: Type<any>): ComponentRef<any> {\n if (this.attached) {\n throw new Error('component has already been attached');\n }\n\n this.attached = true;\n const childComponentFactory = this.componentFactoryResolver.resolveComponentFactory(component);\n\n let componentRef = childComponentFactory.create(this.injector);\n\n this.appRef.attachView(componentRef.hostView);\n this.disposeFn = () => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n };\n\n this.hostElement.appendChild((componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0]);\n\n return componentRef;\n }\n\n dispose() {\n if (this.attached) {\n this.disposeFn();\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[tableColumn]'\n})\nexport class TableColumn {\n @Input('columnSize') columnSize: string; // Optional.\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__body__line__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { EventEmitter, Inject, Output } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { FiltersTableService, TableFilters } from '../../services/table/filters-table.service';\n\n@Directive({\n // The selector has the same name as the headerCell selector in table.component.html\n selector: '[headerCell]'\n})\nexport class TableColumnHeader {\n @Input('headerName') // Optional.\n set headerName(value: string) {\n this._headerName = value;\n this.setHeaderName();\n }\n _headerName: string = '';\n get headerName(): string {\n return this._headerName;\n }\n @Input('columnSize') columnSize: string; // Optional.\n @Input('filterRouting') filterRouting: boolean = false; // Optional. Set to true to use Filter Routing.\n @Input('tableName') tableName: string; // Optional, but mandatory to handle sorting\n @Input('sortName') sortName: string; // Optional, but mandatory to handle sorting\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n @Output() onSortChange: EventEmitter<boolean> = new EventEmitter(); // Emit the sort value (true, false, undefuned) of the current sort icon when clicking\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n private contentHeader: HTMLAnchorElement;\n private filterGroup: NwbFilterGroup;\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private currentCell: ElementRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private filtersTableService: FiltersTableService\n ) {}\n\n ngOnInit() {\n if (this.tableName && this.sortName) {\n if (this.filterRouting) {\n this.handleSortRouting();\n } else {\n this.handleSortBasic();\n }\n }\n }\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n this.renderHeaderColumn();\n }\n\n handleSortRouting() {\n this.filterGroup = this.filtersTableService.getTableFilterGroup(this.tableName);\n\n const filterGroupChangeSub = this.filterGroup.valuesChange$.subscribe(filters => {\n const filterSort = filters.filter(filter => filter.key === 'sort')[0];\n if (this.sortName !== filterSort.value) {\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(filterGroupChangeSub);\n }\n\n handleSortBasic() {\n const sortChangeSub = this.filtersTableService.getSortChangeListner().subscribe(sort => {\n if (this.tableName === sort.dataTableName && this.sortName !== sort.sortName) {\n // Reset the current sort icon\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(sortChangeSub);\n }\n\n resetSortIcon() {\n // Replace current icon with default icon\n this.contentHeader.className = this.contentHeader.className.replace(this.getCurrentSortIcon(), 'idle');\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__head__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__head__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n\n renderHeaderColumn() {\n this.createHeaderContent();\n this.renderer.appendChild(this.currentCell.nativeElement, this.contentHeader);\n }\n\n createHeaderContent() {\n this.contentHeader = document.createElement('a');\n this.contentHeader.className = 'wz-table__head__cell__search';\n this.setHeaderName();\n if (this.tableName && this.sortName) {\n this.handleSort();\n }\n }\n\n private setHeaderName() {\n if (!this.contentHeader) {\n return;\n }\n this.contentHeader.innerHTML = this.headerName;\n }\n\n handleSort() {\n // Set icon in the header column cell\n this.contentHeader.className += ' wz-table__head__cell__search--' + this.getInitialSortIcon();\n\n // On click on the content header, change the icon and emit event\n this.renderer.listen(this.contentHeader, 'click', () => {\n const currentIcon = this.getCurrentSortIcon();\n let newIcon: string;\n let newSort: string, newOrder: boolean;\n\n switch (currentIcon) {\n case 'idle':\n newIcon = 'up';\n newSort = this.sortName;\n newOrder = true;\n break;\n\n case 'up':\n newIcon = 'down';\n newSort = this.sortName;\n newOrder = false;\n break;\n\n case 'down':\n newIcon = 'idle';\n break;\n\n default:\n newIcon = 'idle';\n break;\n }\n // Replace the icon\n this.contentHeader.className = this.contentHeader.className.replace(currentIcon, newIcon);\n\n this.emitEvents(newSort, newOrder);\n });\n }\n\n getInitialSortIcon() {\n if (!this.filterRouting) {\n return 'idle';\n }\n // Get Initial Sort Icon for Routing Filter\n let initialSortIcon = 'idle';\n if (this.filterGroup.get('sort') === this.sortName) {\n initialSortIcon = this.filterGroup.get('order') == 'true' ? 'up' : 'down';\n }\n return initialSortIcon;\n }\n\n getCurrentSortIcon() {\n const regexp = /wz-table__head__cell__search--(?<icon>\\w+)/;\n const { groups } = regexp.exec(this.contentHeader.className);\n return groups.icon;\n }\n\n emitEvents(newSort, newOrder) {\n if (this.filterRouting) {\n // Will send the filter routing value has changes event\n this.filterGroup.setValues({\n sort: newSort,\n order: newOrder,\n currentPage: 1\n });\n } else {\n // Send the event sort change\n this.filtersTableService.emitSortChange(this.tableName, this.sortName, newOrder);\n }\n if (this.tableFilters) {\n this.tableFilters.sort = this.sortName;\n this.tableFilters.order = newOrder;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n }\n this.onSortChange.emit(newOrder);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(subscription => {\n subscription.unsubscribe();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n // The selector has the same name as the tableRaw selector in table.component.html\n selector: '[tableRow]'\n})\nexport class TableRow {\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ImgCDNService } from '../../services/config/img-cdn.service';\n\n@Pipe({\n name: 'imgSrc'\n})\nexport class ImageSrcPipe implements PipeTransform {\n\n constructor(private imgCDNService: ImgCDNService) { }\n\n transform(pictureName: string, size: string): string {\n if(!size) {\n throw \"The size is undefined in ImageSrcPipe.\";\n }\n\n const route: string = this.imgCDNService.getUrlImg(size);\n\n if (!route) {\n throw \"The expected size is not defined in ImageSrcPipe.\";\n }\n\n return route + pictureName;\n }\n}\n","import { Directive, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\n@Directive({\n selector: 'AbstractDebounceDirective'\n})\nexport class AbstractDebounceDirective implements OnDestroy {\n @Input()\n public debounceTime: number;\n\n @Output()\n public onEventChange: EventEmitter<any>;\n\n protected emitEvent$: Subject<any>;\n protected subscription$: Subject<void>;\n\n constructor() {\n this.debounceTime = 500;\n this.onEventChange = new EventEmitter<any>();\n this.emitEvent$ = new Subject<any>();\n this.subscription$ = new Subject<void>();\n }\n\n ngOnInit(): void {\n this.emitEvent$\n .pipe(\n takeUntil(this.subscription$),\n debounceTime(this.debounceTime),\n distinctUntilChanged(),\n tap(value => this.emitChange(value))\n )\n .subscribe();\n }\n\n public emitChange(value: any): void {\n this.onEventChange.emit(value);\n }\n\n ngOnDestroy(): void {\n this.subscription$.next();\n this.subscription$.complete();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { AbstractDebounceDirective } from './abstract-debounce.directive';\n@Directive({\n selector: 'input[debounceKeyUp]'\n})\nexport class DebounceKeyupDirective extends AbstractDebounceDirective {\n constructor() {\n super();\n }\n\n @HostListener('keyup', ['$event'])\n public onKeyUp(event: any): void {\n event.preventDefault();\n this.emitEvent$.next(event);\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'wz-loader',\n templateUrl: './loader.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class LoaderComponent {\n @Input()\n text: string;\n @Input()\n small = false;\n @Input()\n position: string;\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'wz-alert',\n styleUrls: ['./alert.component.scss'],\n templateUrl: './alert.component.html'\n})\nexport class AlertComponent implements OnInit {\n @Input() icon = true;\n @Input() warning = false;\n @Input() success = false;\n @Input() iconClass = 'fas fa-info';\n constructor() {}\n ngOnInit(): void {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberToArray'\n})\nexport class NumberToArray implements PipeTransform {\n\n transform(number: number): any[] {\n return Array.from('x'.repeat(number));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-page-selector',\n templateUrl: './page-selector.component.html'\n})\nexport class PageSelectorComponent {\n\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Input() set totalItems(totalItems: number) {\n this.numberOfPage = Math.ceil(totalItems / this.pagination.itemsPerPage);\n this.largeNumberOfPage = this.numberOfPage > 30;\n }\n get totalItems(): number {\n return this._totalItems;\n }\n private _totalItems: number;\n openAbsoluteSelect:boolean = false;\n\n largeNumberOfPage: boolean = false;\n numberOfPage: number = 0;\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter();\n\n constructor() {}\n\n onGotoPageChange(event, directValue) {\n if (directValue) {\n this.pageChange.emit(event);\n this.openAbsoluteSelect = false;\n } else {\n this.pageChange.emit(parseInt(event.target.value));\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'LargeNumberOfPage'\n})\nexport class LargeNumberOfPagePipe implements PipeTransform {\n /**\n * Return an incremental array\n * Display 30 pages, from -15 to +15 of the current page\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number, currentPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n\n let arrayLength: number = 32;\n\n const startAtPage = currentPage <= 15 ? 0: currentPage - 15;\n const totalPage = Math.ceil(totalItems / itemsPerPage);\n\n\n\n const arrayWithPageNumber = Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => {\n\n const pageIndex:any = {\n display: startAtPage + x + 1,\n value: startAtPage + x + 1\n };\n\n if (x === arrayLength - 2) {\n pageIndex.display = '...';\n }\n if (x === arrayLength - 1) {\n pageIndex.display = totalPage;\n pageIndex.value = totalPage;\n }\n\n return pageIndex;\n });\n\n\n if (startAtPage) {\n arrayWithPageNumber.unshift(\n {\n display: 1,\n value: 1\n },\n {\n display: \"...\",\n value: 2\n }\n );\n }\n\n return arrayWithPageNumber;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { WzImgManagerComponent } from './wz-img-manager.component';\nimport { ImgUploadComponent } from './components/img-upload/img-upload.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ImgTabsComponent } from './components/img-tabs/img-tabs.component';\nimport { CommonModule } from '@angular/common';\nimport { DragDropDirective } from './directives/drag-drop.directive';\nimport { PexelLibComponent } from './components/pexels-lib/pexels-lib.component';\nimport { FormsModule } from '@angular/forms';\nimport { ImgCardComponent } from './components/images-view/mosaic-view/img-card/img-card.component';\nimport { NgScrollbarModule } from 'ngx-scrollbar';\nimport { NgScrollbarReachedModule } from 'ngx-scrollbar/reached-event';\nimport { NwbAllModule } from '@wizishop/ng-wizi-bulma';\nimport { UploadListComponent } from './components/upload-list/upload-list.component';\nimport { ImgEditorComponent } from './components/img-editor/img-editor.component';\nimport { ImageCropperModule } from 'ngx-image-cropper';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CanvaBtnComponent } from './components/canva-btn/canva-btn.component';\nimport { ImgSelectionComponent } from './components/img-selection/img-selection.component';;\nimport { LoadingDirective } from './directives/loading.directive';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AutoHideDirective } from './directives/auto-hide.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CopyClipboardDirective } from './directives/copy-to-clipboard.directive';\nimport { DropdownComponent } from './components/shared/dropdown/dropdown.component';\nimport { EditorInfoSectionComponent } from './components/img-editor/info-section/info-section.component';\nimport { CropperComponent } from './components/img-editor/cropper/cropper.component';\nimport { ImagesViewComponent } from './components/images-view/images-view.component';\nimport { MosaicViewComponent } from './components/images-view/mosaic-view/mosaic-view.component';\nimport { TableViewComponent } from './components/images-view/table-view/table-view.component';\nimport { TableComponent } from './components/shared/table/table.component';\nimport { InputSearchComponent } from './components/shared/input-search/input-search.component';\nimport { PaginationComponent } from './components/shared/pagination/pagination.component';\nimport { PagniationArrayTotalPages } from './pipes/pagination/array-total-pages/array-pages.pipe';\nimport { PagniationText } from './pipes/pagination/text/custom-text.pipe';\nimport { PagniationIsLastPage } from './pipes/pagination/total-pages/is-last-page.pipe';\nimport { CheckBoxRow } from './directives/table/checkBoxRow.directive';\nimport { TableColumn } from './directives/table/column.directive';\nimport { TableColumnHeader } from './directives/table/columnHeader.directive';\nimport { TableRow } from './directives/table/raw.directive';\nimport { CheckboxComponent } from './components/shared/checkbox/checkbox.component';\nimport { ImageSrcPipe } from './pipes/images/img-src.pipe';\nimport { AbstractDebounceDirective } from './directives/abstract-debounce/abstract-debounce.directive';\nimport { DebounceKeyupDirective } from './directives/abstract-debounce/debounce-keyup.directive';\nimport { LoaderComponent } from './components/loader/loader.component';\nimport { AlertComponent } from './components/shared/alert/alert.component';\nimport { NumberToArray } from './pipes/number-to-array.pipe';\nimport { PageSelectorComponent } from './components/shared/pagination/page-selector/page-selector.component';\nimport { LargeNumberOfPagePipe } from './pipes/pagination/large-number-of-page/large-number-of-page.pipe';\n\nconst components = [\n WzImgManagerComponent,\n ImgTabsComponent,\n ImgUploadComponent,\n PexelLibComponent,\n ImgCardComponent,\n UploadListComponent,\n ImgEditorComponent,\n EditorInfoSectionComponent,\n CanvaBtnComponent,\n ImgSelectionComponent,\n LoaderComponent,\n DropdownComponent,\n CropperComponent,\n ImagesViewComponent,\n MosaicViewComponent,\n TableViewComponent,\n TableComponent,\n InputSearchComponent,\n PaginationComponent,\n CheckboxComponent,\n AlertComponent,\n PageSelectorComponent,\n];\n\nconst directives = [\n DragDropDirective,\n LoadingDirective,\n AutoHideDirective,\n CopyClipboardDirective,\n TableColumn,\n CheckBoxRow,\n TableColumnHeader,\n TableRow,\n AbstractDebounceDirective,\n DebounceKeyupDirective,\n];\n\nconst pipes = [\n PagniationArrayTotalPages,\n PagniationIsLastPage,\n PagniationText,\n ImageSrcPipe,\n NumberToArray,\n LargeNumberOfPagePipe\n];\n\n@NgModule({\n declarations: [\n ...components,\n ...directives,\n ...pipes\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n NgScrollbarModule,\n NgScrollbarReachedModule,\n NwbAllModule,\n ImageCropperModule,\n CdkTableModule,\n DragDropModule,\n TranslateModule],\n providers: [],\n exports: [\n WzImgManagerComponent]\n})\nexport class WzImgManagerModule { }\n","import { CanvaCreateDesign } from \"./canva-create-design.dto\";\n\nexport class CanvaButtonApi {\n createDesign: (\n opts: {\n design: CanvaCreateDesign,\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n ) => void;\n editDesign: (opts: {\n opts: {\n design: {\n id: any\n },\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n }) => void;\n};","export class ImgApiDto {\n shop_token: string;\n image_manager_route = '';\n pexels_token: string;\n pexels_route = '';\n shop_category: string;\n canva_token: string;\n canva_url = '';\n assets_route: string = 'assets/img-manager/';\n}\n","export class ImgCDNConfigDTO {\n url_raw_image = '';\n url_100_image = '';\n url_200_image = '';\n url_400_image = '';\n url_800_image = '';\n}"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@wizishop/img-manager/lib/services/img-selection.service.ts","ng://@wizishop/img-manager/lib/dto/config/external/external-config.dto.ts","ng://@wizishop/img-manager/lib/services/img-manager.service.ts","ng://@wizishop/img-manager/lib/services/config/img-cdn.service.ts","ng://@wizishop/img-manager/lib/services/config/external-config.service.ts","ng://@wizishop/img-manager/lib/services/user-settings.service.ts","ng://@wizishop/img-manager/lib/services/canva.service.ts","ng://@wizishop/img-manager/lib/services/img-event.service.ts","ng://@wizishop/img-manager/lib/services/dom.service.ts","ng://@wizishop/img-manager/lib/wz-img-manager.component.ts","ng://@wizishop/img-manager/lib/animations/easeInOut/ease-in-out.animation.ts","ng://@wizishop/img-manager/lib/services/alert.service.ts","ng://@wizishop/img-manager/lib/components/img-upload/img-upload.component.ts","ng://@wizishop/img-manager/lib/services/rename-picture.service.ts","ng://@wizishop/img-manager/lib/components/upload-list/upload-list.component.ts","ng://@wizishop/img-manager/lib/components/img-tabs/img-tabs.component.ts","ng://@wizishop/img-manager/lib/directives/drag-drop.directive.ts","ng://@wizishop/img-manager/lib/services/pexels.service.ts","ng://@wizishop/img-manager/lib/animations/listAnnimation/list.animation.ts","ng://@wizishop/img-manager/lib/components/pexels-lib/pexels-lib.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-actions-handler.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/img-card/img-card.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/img-editor.component.ts","ng://@wizishop/img-manager/lib/components/canva-btn/canva-btn.component.ts","ng://@wizishop/img-manager/lib/components/img-selection/img-selection.component.ts","ng://@wizishop/img-manager/lib/directives/loading.directive.ts","ng://@wizishop/img-manager/lib/directives/auto-hide.directive.ts","ng://@wizishop/img-manager/lib/directives/copy-to-clipboard.directive.ts","ng://@wizishop/img-manager/lib/components/shared/dropdown/dropdown.component.ts","ng://@wizishop/img-manager/lib/components/img-editor/info-section/info-section.component.ts","ng://@wizishop/img-manager/lib/animations/insertRemove/insert-remove.animation.ts","ng://@wizishop/img-manager/lib/components/img-editor/cropper/cropper.component.ts","ng://@wizishop/img-manager/lib/components/images-view/images-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/mosaic-view/mosaic-view.component.ts","ng://@wizishop/img-manager/lib/components/images-view/table-view/table-view.component.ts","ng://@wizishop/img-manager/lib/services/table/filters-table.service.ts","ng://@wizishop/img-manager/lib/components/shared/table/table.component.ts","ng://@wizishop/img-manager/lib/components/shared/input-search/input-search.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/total-pages/is-last-page.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/pagination.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/array-total-pages/array-pages.pipe.ts","ng://@wizishop/img-manager/lib/pipes/pagination/text/custom-text.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/checkbox/checkbox.component.ts","ng://@wizishop/img-manager/lib/directives/table/checkBoxRow.directive.ts","ng://@wizishop/img-manager/lib/directives/table/column.directive.ts","ng://@wizishop/img-manager/lib/directives/table/columnHeader.directive.ts","ng://@wizishop/img-manager/lib/directives/table/raw.directive.ts","ng://@wizishop/img-manager/lib/pipes/images/img-src.pipe.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/abstract-debounce.directive.ts","ng://@wizishop/img-manager/lib/directives/abstract-debounce/debounce-keyup.directive.ts","ng://@wizishop/img-manager/lib/components/loader/loader.component.ts","ng://@wizishop/img-manager/lib/components/shared/alert/alert.component.ts","ng://@wizishop/img-manager/lib/pipes/number-to-array.pipe.ts","ng://@wizishop/img-manager/lib/components/shared/pagination/page-selector/page-selector.component.ts","ng://@wizishop/img-manager/lib/pipes/pagination/large-number-of-page/large-number-of-page.pipe.ts","ng://@wizishop/img-manager/lib/wz-img-manager.module.ts","ng://@wizishop/img-manager/lib/dto/canva.dto.ts","ng://@wizishop/img-manager/lib/dto/config/apis/api.dto.ts","ng://@wizishop/img-manager/lib/dto/config/image-cdn/image-cdn-config.dto.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__values","o","Symbol","iterator","m","next","value","done","TypeError","__read","e","ar","push","error","__spread","concat","ImgSelectionService","imgSelectedList","multipleImgMode","imgSelectionSubscriber","imgListLoading","ReplaySubject","getImgSelection","setImgSelection","_this","forEach","elem","emitImgSelectionChange","addImgSelected","picture","getImgSelectionChange","Observable","subscriber","map","obs","JSON","parse","stringify","removeImgSelectedByIndex","index","splice","removeImgSelectedById","id_file","_b","_c","removeImgSelectionByIds","id_file_list","indexOf","removeAllImgSelected","setMultipleImgMode","activated","initImgSelectedList","emitImgListLoading","loading","getImgListLoadingEventListner","asObservable","moveImgOrder","event","fromIndex","previousIndex","toIndex","currentIndex","Injectable","providedIn","ImgManagerService","http","params","HttpParams","set","pageFicheProductConfig","stateDisplayed","showImgManagerModule","showSelection","displayBtn","pageficheProduct","wiziblockConfig","simpleWithButtonOpenerConfig","fullWindowConfig","setApiConfig","img_manager_route","shop_token","imgManagerRoute","shopToken","getOptionsHeaders","header","headers","HttpHeaders","Authorization","getParams","getShopImgList","get","getShopTotalImgList","getShopImg","idFile","param","uploadFile","formData","post","uploadFileByUrl","url","fileName","replaceImg","imageBase64","body","type","put","changeImgName","removeImg","delete","removeMultipleImg","id_array","getImgManagerDisplayConfig","displayName","getAllImgManagerDisplayConfig","HttpClient","ImgCDNService","imgCDNConfig","setImgCDNConfig","getUrlImg","size","urlProperty","keys","filter","RegExp","test","getAllSize","match","ImgManagerConfigService","imgManagerService","imgCDNService","setExternalConfig","externalConfig","api","image_manager_route","getCanvaApiURL","canva_url","getCanvaApiToken","canva_token","getRouteAssets","assets_route","getPexelsApiURL","pexels_route","getPexelsApiToken","pexels_token","getShopCategory","shop_category","UserSettingsService","userdisplayPreference","setUserDisplayPreference","localStorage","setItem","getUserDisplayPreference","getItem","CanvaService","externalConfigService","bindExpectedImgSizeEvent","BehaviorSubject","bindExpectedSizeDone","setCanvaApiConfig","canvaApiURL","canvaApiKey","getCanvaLogo","bindEventExepectedImgSizeChange","expectedImgSizesChange","mediaDTO","getCanvaApi","observer","loadCanva","subscribe","complete","canvaApi","Canva","DesignButton","initializeCanva","initialize","apiKey","then","loadCanvaScript","node","document","createElement","src","async","charset","onload","getElementsByTagName","appendChild","ImgEventService","imgToEditEvent","Subject","imgRemoved","imgAdded","listDisplayedChange","emitImgRemoved","getImgRemovedEventListner","emitImgToEdit","imgToEdit","getImgToEditEventListner","emitImgAdded","getImgAddedEventListner","emitlistDisplayedChange","getlistDisplayedChange","DomService","documentEventSource","documentEventDone","documentScrollSource","documentScrollDone","documentEvent","setDocumentEventListener","addEventListener","documentScroll","setScrollEventListener","window","onscroll","WzImgManagerComponent","imgSelectionService","userSettingsService","canvaService","imgEventService","domService","imgManagerClosed","EventEmitter","_multipleImgMode","_showImgManagerModule","close","listDisplayed","hideTab","activate","displaySmall","onKeydownHandler","onClose","ngOnInit","selectImgEvent","imgSlection","checkCloseImgManager","checkUserDisplayPreference","listDisplayedEvent","setCurrentTab","setTimeout","addBodyBottomPaddingForModule","openSmall","setBodyMainScroll","openFull","hideBodyMainScroll","removeBodyBottomPaddingForModule","emit","onImgManagerClosed","html","overflowHTML","style","overflowY","bodyPadding","parseInt","paddingBottom","changeDisplayTab","ngOnDestroy","unsubscribe","Input","ImgManagerConfigDto","Output","HostListener","KeyboardEvent","Component","selector","template","easeInOut","trigger","state","opacity","transition","animate","AlertService","nwbAlertService","translateService","actionMsg","alertConfig","message","duration","openAlert","msgKey","closePreviousAlert","trans","setAlertColor","alertRefComponent","open","afterClosed","openAlertWithBackendRespons","msgBackend","dismiss","isErrorMsg","color","NwbAlertService","TranslateService","ImgUploadComponent","imgManager","alertService","files","isLoading","imgUploaded","loadingText","errorUploadingImg","errorNotImg","assetsIcon","getAssets","filesChangeByClick","filesChangeByDragAndDrop","filesList","removeDragAndDropStyle","imgToUploadList","files_1","files_1_1","file","FormData","append","name","isFileImage","forkJoin","img","onImgUpload","fileType","split","dragAndDropBox","nativeElement","ViewChild","ElementRef","animations","RenamePictureService","picturesList","pictureNameChanged","errorRenameImg","msgSavingImgName","msgImgNameSaved","setEvents","setPicturesList","onRenamePicture","pictureRenamed","pipe","debounceTime","pictureNameUpdate","renamePicture","getPictureById","id","display_name","data","previousName","UploadListComponent","renamePictureService","onImgUploaded","onToggleSelectImg","selected","imgSelectionChange","imgSelection","idFileList","ImgTabsComponent","imgEventEditService","route","currentTab","switchDisplayWindow","tabActive","tabs","editTab","imgUpload","snackBarNewVersionConfig","toggleTabs","imgUploadedComponent","onEditClosed","onShowImgUploaded","switchDisplayWindowImgView","switchRouterLink","Router","DragDropDirective","onFileDropped","background","onDragOver","evt","preventDefault","stopPropagation","onDragLeave","ondrop","dataTransfer","HostBinding","Directive","PexelsService","languages","fr","en","it","es","setLang","currentLang","onLangChange","langData","lang","searchOnPexels","toSearch","perPage","page","apiBaseUrl","request","httpOptions","shopCategory","listAnnimation","query","transform","stagger","optional","PexelLibComponent","wzImgLibService","searchValue","disableSearch","showImgUploaded","searchUpdated","nbResult","currentPage","initComponent","photosColumns","nbColumuns","responsiveColumns","outerElement","uploadingImg","untitled","successUploadPhoto","errorUploadPhoto","errorRetrievePhotos","subs","control","ngAfterViewInit","oldSearchValue","setNbColumnsToDisplayPhoto","setPhotosColumns","search","width","offsetWidth","onSearchNameChanged","onSearchChange","onBottomReached","scrollHandler","resetSearch","searchSub","wzImgLibDto","total_results","photos","photo","bestColumnIndex","getBestColumn","height","lastPic","querySelector","medium","indexColumn","bestColumn","photosColumn","uploadPhoto","uploading","uploadSub","instant","uploaded","code","sub","ImagesActionHandler","imgEventCardService","externalService","picturesListChange","tableFilters","sort","undefined","order","totalItems","itemsPerPage","displayPexelsResults","disable","disableChange","filtersChange","pictureNameChange","errorRemoveImg","errorAlreadyUsedImg","fakeImgRoute","onToggleAllCheckBoxRow","delSelected","_pictureListeChange","onToggleDelSelection","onFiltersChange","onEdit","onRemoveImg","deleted","msg","status","onPictureNotLoading","onDownloadImg","file_name","getRAWImgRoute","responseType","val","URL","createObjectURL","downloadUrl","revokeObjectURL","onNameChange","a","href","download","click","ngDestroy","getDataAPISub","ImgCardComponent","_super","focusInput","toggleImgSelected","isUploadSection","activeConfirmDelete","tabDisplayed","displayLargeWindow","onToggleImgSelected","ImgEditorComponent","editClosed","isImgModified","isNameModified","currentCroppedImage","msgFailSave","msgFailLoad","msgSuccessEdit","onSave","obsReplaceImg","obsChangeImgName","ranameAndReplaceImg","onRestartEdit","onCancel","onImgCropped","imgBase64","res1","res2","CanvaBtnComponent","wzImgEventService","renderer","imgLoading","availableFormat","ImgManager.CanvaBtn.smallSquare","ImgManager.CanvaBtn.mediumSquare","ImgManager.CanvaBtn.bigSquare","openDropDownMenu","errorUploadCanvaImg","errorRenameCanvaImg","canvaLogoRouteAssets","listenCanvaExpectedSize","subExpectedImgSizesChange","expectedWidth","image_width","expectedHeight","image_height","onOpenCanva","subCanvaApi","addOverflowBody","createDesign","dimensions","units","publishLabel","design","onDesignPublish","_a","exportUrl","designTitle","designPublished","onDesignClose","removeOverflowBody","subUploadImg","addClass","removeClass","Renderer2","ImgSelectionComponent","removingAll","cancellingAll","importingAll","dragStart","trashPositionIndex","trashPositionLeft","getImgSelected","init","drop","removeImgFromSelection","LoadingDirective","el","currentLoading","interval","element","launchLoading","setInterval","Math","floor","random","clearInterval","AutoHideDirective","_elementRef","forceOn","clickOutside","targetElement","clickedInside","contains","classNameFromElement","getAttribute","includes","triggerElement","needToClose_1","v","CopyClipboardDirective","copied","onClick","payload","listener","clipboardData","setData","toString","execCommand","removeEventListener","MouseEvent","DropdownComponent","EditorInfoSectionComponent","_isNameModified","isNameModifiedChange","msgCopyToClipBoard","imgName","getFileSize","round","copyToClipBoard","insertRemove","CropperComponent","_isImgModified","isImgModifiedChange","currentCroppedImageChange","isCropperReady","isCropped","isImgCropped","isImgCroppedInitilized","imageChangedEvent","croppedImage","canvasRotation","rotation","scale","showCropper","containWithinAspectRatio","resolutionConfig","label","config","maintainAspectRatio","active","aspectRatio","rotationConfig","icon","method","zoomConfig","imgCropperConfig","restartEdit","imgRoute","imgType","getImgType","setDefautAspectRatio","pop","raw_height","raw_width","defaultAspectRatio","onRestart","resetConfCropper","onImgModified","fileChangeEvent","imageCropped","detectImgCropperChange","base64","imageLoaded","cropperReady","loadImageFailed","changeResolutionSize","setActiveItem","setCropperProperties","confirmCrop","array","item","indexItem","property","rotateLeft","flipAfterRotate","rotateRight","flipHorizontal","flipH","flipVertical","flipV","flippedH","flippedV","zoomOut","zoomIn","applyMethod","ImagesViewComponent","widthLargeCard","widthSmallCard","nbFakeImg","imgFullWidthConfig","max","largeImgWidthFactor","smallImgWidthFactor","imgWidthConfig","searchQueryChanged","filtersChanged","savePictureList","nbImgToDelSelected","isTotalRetieved","delListImgLoader","failLoaded","confirmImgSup","pageIndex","pageSize","pageSizeOptions","errorGetAllImg","errorGetTotalImg","errorGetImg","msgNoImgFound","maxLengthCardShow","reducePictureListMaxLength","setNbImgToDisplay","_getImgList","getImgList","onSwitchFormatDisplayed","onImgSelected","setNbImgToDelSelected","searchText","searchedValue","removeListImg","idImgToRemove","selectImgChosen","picturesListSelected","displayConfirmImgSup","cancelSup","onPicturesListChange","containerWidth","imgLibContainer","scrollWidth","innerWidth","getImgWidthFactors","maxImgWidthFactor","minImgWidthFactor","minImgWidth","maxImgWidth","ceil","nbMaxImgPerLine","nbMinImgPerLine","getTotalImgPerPage","screenWidth","minWidth","imgSizesConfig","currentImgWidthConfig","fullSize","currentImgWidthConfig_1","currentImgWidthConfig_1_1","widthConfig","total","setParams","limit","initVariables","loadingSuccess","selectImgSelected","idImgSlectedList","displayPexelsLib","calculNbImgFake","nbImgDisplayed","nbImgPerLine","getImg","take","imgAlreadyExist","unshift","imgRemovedEvent","imgAddedEvent","refreshTotalImgList","totalRecords","previousSearchValue","switchDisplayWindowMosaic","MosaicViewComponent","onCardRenamePicture","switchDisplayWindowCard","TableViewComponent","dataTableName","FiltersTableService","filterRoutingBuilder","filterGroups","Map","dataTableFilters","sortSubject","getTableFilterGroup","has","filterGroup","group","emitSortChange","sortName","getSortChangeListner","setPaginationFilters","setValues","setInitialPaginationFiltersIfNotExist","NwbFilterRoutingBuilder","TableComponent","filtersTableService","tableFiltersChange","placeholder","checkbox","toggleAllCheckBox","disablePagniation","headerCheckBoxId","uuid","tableRoutingName","_filterGroup","valuesChange$","setTablesFilters","filterGroupChangeSub","filters","onToggleAllCheckBox","checked","searchChange","pageChange","encapsulation","ViewEncapsulation","None","InputSearchComponent","smallPadding","innerValue","changeDebounced","onTouchedCallback","onChangeCallback","writeValue","registerOnChange","fn","registerOnTouched","handleDebouncedKeyUp","InputSearchComponent_1","providers","provide","NG_VALUE_ACCESSOR","useExisting","multi","PagniationIsLastPage","Error","Pipe","PaginationComponent","_pagination","pagination","decrementPage","incrementPage","onGotoPageChange","pageNumber","PagniationArrayTotalPages","arrayLength","Number","x","PagniationText","currentItemsLow","currentItemsHigh","low","high","CheckboxComponent","alone","disabled","_onChange","_onTouched","setDisabledState","isDisabled","obj","onChange","CheckboxComponent_1","CheckBoxRow","currentRow","appRef","resolver","injector","checkBoxValueChange","_value","checkboxComponentRef","setCheckBoxValue","createCheckBoxComponent","handleChecboxInputs","handleCheckboxOutputs","checkBoxContainer","className","insertBefore","firstChild","htmlContainer","HtmlContainer","attach","instance","checkBoxId","checkBoxName","checkBoxValue","_toggleCheckbox","dispose","ApplicationRef","Inject","args","DOCUMENT","ComponentFactoryResolver","Injector","hostElement","componentFactoryResolver","attached","component","componentRef","resolveComponentFactory","attachView","hostView","disposeFn","detachView","destroy","rootNodes","TableColumn","currentCell","centerCellValue","applyCustomStylesOnCell","flexGrow","columnSize","centerCell","TableColumnHeader","_headerName","filterRouting","onSortChange","subscriptions","setHeaderName","tableName","handleSortRouting","handleSortBasic","renderHeaderColumn","filterSort","resetSortIcon","sortChangeSub","contentHeader","replace","getCurrentSortIcon","createHeaderContent","handleSort","innerHTML","headerName","getInitialSortIcon","listen","newIcon","newSort","newOrder","currentIcon","emitEvents","initialSortIcon","exec","groups","subscription","TableRow","ImageSrcPipe","pictureName","AbstractDebounceDirective","onEventChange","emitEvent$","subscription$","takeUntil","distinctUntilChanged","tap","emitChange","DebounceKeyupDirective","onKeyUp","LoaderComponent","small","AlertComponent","warning","success","iconClass","NumberToArray","number","from","repeat","PageSelectorComponent","openAbsoluteSelect","largeNumberOfPage","numberOfPage","_totalItems","directValue","LargeNumberOfPagePipe","startAtPage","totalPage","arrayWithPageNumber","display","components","directives","pipes","WzImgManagerModule","NgModule","declarations","imports","CommonModule","HttpClientModule","FormsModule","NgScrollbarModule","NgScrollbarReachedModule","NwbAllModule","ImageCropperModule","CdkTableModule","DragDropModule","TranslateModule","exports","url_raw_image","url_100_image","url_200_image","url_400_image","url_800_image"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { Subscriber, Observable, ReplaySubject } from 'rxjs';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgSelectionService {\n\n imgSelectedList: ImgPictureDTO[] = [];\n multipleImgMode: boolean = false;\n private imgSelectionSubscriber: Subscriber<any>[] = [];\n private imgListLoading: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n\n constructor() {}\n\n getImgSelection() {\n return this.imgSelectedList;\n }\n\n // Use in img manager webelement, when the product img selection is retrieved\n setImgSelection(imgSelectedList: ImgPictureDTO[]) {\n this.imgSelectedList.length = 0;// Remove all the elements from the array and keep the reference\n\n if (imgSelectedList && imgSelectedList.length) {\n imgSelectedList.forEach(elem => this.imgSelectedList.push(elem));\n }\n this.emitImgSelectionChange();\n }\n\n addImgSelected(picture : ImgPictureDTO) {\n if (this.multipleImgMode) {\n this.imgSelectedList.push(picture);\n } else {\n this.imgSelectedList = [picture];\n }\n this.emitImgSelectionChange();\n }\n\n getImgSelectionChange() {\n const obsImgSelection = new Observable<ImgPictureDTO[]>(subscriber => {\n this.imgSelectionSubscriber.push(subscriber);\n });\n return obsImgSelection;\n }\n\n emitImgSelectionChange() {\n this.imgSelectionSubscriber.map(obs =>\n obs.next(JSON.parse(JSON.stringify(this.imgSelectedList)))\n );\n }\n\n removeImgSelectedByIndex(index: number) {\n this.imgSelectedList.splice(index, 1);\n this.emitImgSelectionChange();\n }\n\n removeImgSelectedById(id_file: string) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n let index = 0;\n for (const img of this.imgSelectedList) {\n if(img.id_file === id_file) {\n this.removeImgSelectedByIndex(index);\n break;\n }\n index++;\n }\n }\n\n removeImgSelectionByIds(id_file_list: string[]) {\n if (!this.multipleImgMode) {\n this.imgSelectedList = [];\n return;\n }\n\n for (let index = this.imgSelectedList.length -1; index > -1 ; index--) {\n const id_file = this.imgSelectedList[index].id_file;\n if (id_file_list.indexOf(id_file) !== -1) {\n this.removeImgSelectedByIndex(index);\n }\n }\n }\n\n removeAllImgSelected() {\n this.imgSelectedList.length = 0;\n this.emitImgSelectionChange();\n // Remove all the elements from the array and keep the reference\n }\n\n setMultipleImgMode(activated: boolean) {\n this.multipleImgMode = activated;\n }\n\n initImgSelectedList(imgSelectedList: ImgPictureDTO[]) {\n // Retrieve the imgSelectedList from parameter\n if (imgSelectedList) {\n this.imgSelectedList = imgSelectedList;\n return;\n }\n // Remove all elements from imgSelectedList\n if (this.imgSelectedList && this.imgSelectedList.length) {\n this.imgSelectedList.splice(0, this.imgSelectedList.length);\n return;\n }\n this.imgSelectedList = [];\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n emitImgListLoading(loading: boolean){\n this.imgListLoading.next(loading);\n }\n\n /**\n * Use to display the loader on img selection list\n * @param loading\n */\n getImgListLoadingEventListner(){\n return this.imgListLoading.asObservable();\n }\n\n /**\n * Use angular cdk function\n * Called by img selection component\n * @param event\n */\n moveImgOrder(event: CdkDragDrop<string[]>) {\n const fromIndex = event.previousIndex;\n const toIndex = event.currentIndex;\n this.imgSelectedList.splice(toIndex, 0, this.imgSelectedList.splice(fromIndex, 1)[0]);\n this.emitImgSelectionChange();\n }\n}\n","import { ImgApiDto } from '../apis/api.dto';\nimport { ImgCDNConfigDTO } from '../image-cdn/image-cdn-config.dto';\n\nexport class ImgManagerConfigDto {\n api: ImgApiDto;\n imgCDNConfig : ImgCDNConfigDTO;\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from \"rxjs\";\nimport { ParamsImgManagerDTO } from '../dto/img-manager.dto';\nimport { ImgManagerDisplayConfig } from '../dto/export-dtos.api';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerService {\n\n imgManagerRoute: string;\n shopToken: string;\n\n params = new HttpParams().set(\"limit\",\"20\").set(\"page\",\"1\");\n\n // Display the img selection\n private pageFicheProductConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: true,\n showImgManagerModule: true,\n showSelection: true,\n displayBtn: true,\n pageficheProduct: true\n }\n\n private wiziblockConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n private simpleWithButtonOpenerConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'closed',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: true\n }\n\n private fullWindowConfig: ImgManagerDisplayConfig = {\n stateDisplayed: 'window',\n multipleImgMode: false,\n showImgManagerModule: true,\n showSelection: false,\n displayBtn: false\n }\n\n constructor(private http: HttpClient) { }\n\n setApiConfig(img_manager_route: string, shop_token: string) {\n this.imgManagerRoute = img_manager_route;\n this.shopToken = shop_token;\n }\n\n private getOptionsHeaders(params?: ParamsImgManagerDTO) {\n const header = { headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.shopToken\n })\n };\n if (params) {\n this.getParams(params);\n header['params'] = this.params\n }\n return header;\n }\n\n getShopImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images`, this.getOptionsHeaders(params));\n }\n\n getShopTotalImgList(params?: ParamsImgManagerDTO): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/total/image`, this.getOptionsHeaders(params));\n }\n\n getShopImg(idFile: string): Observable<any> {\n return this.http.get(`${this.imgManagerRoute}/images/${idFile}`, this.getOptionsHeaders());\n }\n\n getParams(params: ParamsImgManagerDTO){\n this.params = new HttpParams();\n this.params = this.params.set('id_file:sort', 'desc');\n for (const param in params) {\n this.params = this.params.set(param, params[param]);\n }\n }\n\n uploadFile(formData: FormData) {\n return this.http.post(`${this.imgManagerRoute}/images/template`, formData, this.getOptionsHeaders());\n }\n\n uploadFileByUrl(url: string, fileName?: string) {\n const body = {\n url,\n fileName\n };\n return this.http.post(`${this.imgManagerRoute}/images/template`, { url, fileName }, this.getOptionsHeaders());\n }\n\n replaceImg(imageBase64: string, id_file: string) {\n const body = {\n imageBase64,\n type : \"RAW\"\n }\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}/replace`, body, this.getOptionsHeaders());\n }\n\n changeImgName(fileName: string, id_file: string) {\n return this.http.put(`${this.imgManagerRoute}/images/${id_file}?file_name=${fileName}`, null, this.getOptionsHeaders());\n }\n\n removeImg(id_file: string) {\n return this.http.delete(`${this.imgManagerRoute}/images/${id_file}`, this.getOptionsHeaders());\n }\n\n removeMultipleImg(id_array: string[]){\n return this.http.post(`${this.imgManagerRoute}/images-multiple-delete`, { id_array }, this.getOptionsHeaders());\n }\n\n getImgManagerDisplayConfig(displayName: \"window\" | \"wizi-block\" | \"fiche-product\" | \"simple-with-button\") {\n switch (displayName) {\n case \"window\":\n return this.fullWindowConfig;\n\n case \"wizi-block\":\n return this.wiziblockConfig;\n\n case \"fiche-product\":\n return this.pageFicheProductConfig;\n\n case \"simple-with-button\":\n return this.simpleWithButtonOpenerConfig;\n\n default:\n return;\n }\n }\n\n getAllImgManagerDisplayConfig(): ImgManagerDisplayConfig[] {\n return [\n this.fullWindowConfig,\n this.wiziblockConfig,\n this.pageFicheProductConfig,\n this.simpleWithButtonOpenerConfig,\n ]\n }\n}","import { Injectable } from '@angular/core';\nimport { ImgCDNConfigDTO } from '../../dto/config/image-cdn/image-cdn-config.dto';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgCDNService {\n\n imgCDNConfig: ImgCDNConfigDTO = null;\n\n constructor() {}\n\n setImgCDNConfig(imgCDNConfig: ImgCDNConfigDTO) {\n this.imgCDNConfig = imgCDNConfig;\n }\n\n getUrlImg(size: '100'|'200'|'400'|'800'|'raw'|string) {\n const urlProperty = Object.keys(this.imgCDNConfig)\n .filter(url =>\n new RegExp(size, 'i').test(url)\n )[0];\n\n return this.imgCDNConfig[urlProperty];\n }\n\n getAllSize(): string[] {\n return Object.keys(this.imgCDNConfig)\n .map(elem =>\n elem.match(/_(\\w+)_/)[1]\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ImgManagerConfigDto } from '../../dto/config/external/external-config.dto';\nimport { ImgManagerService } from '../img-manager.service';\nimport { ImgCDNService } from './img-cdn.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImgManagerConfigService {\n\n externalConfig: ImgManagerConfigDto;\n\n constructor(\n private imgManagerService: ImgManagerService,\n private imgCDNService: ImgCDNService\n ) {}\n\n /**\n * Set imgManagerService and imgCDNService\n * Canva and Pexel service retrieve the externalConfig at their initialization\n * @param externalConfig\n */\n setExternalConfig(externalConfig: ImgManagerConfigDto) {\n this.externalConfig = externalConfig;\n this.imgManagerService.setApiConfig(externalConfig.api.image_manager_route, externalConfig.api.shop_token);\n this.imgCDNService.setImgCDNConfig(externalConfig.imgCDNConfig);\n }\n\n getCanvaApiURL() {\n return this.externalConfig.api.canva_url;\n }\n\n getCanvaApiToken() {\n return this.externalConfig.api.canva_token;\n }\n\n getRouteAssets() {\n return this.externalConfig.api.assets_route;\n }\n\n getPexelsApiURL() {\n return this.externalConfig.api.pexels_route;\n }\n\n getPexelsApiToken() {\n return this.externalConfig.api.pexels_token;\n }\n\n getShopCategory() {\n return this.externalConfig.api.shop_category;\n }\n}","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserSettingsService {\n\n private userdisplayPreference = 'WzImgManagerListDisplayed';\n\n constructor() {\n }\n\n /**\n * true : display list\n * false : display mosaic\n * @param value\n */\n setUserDisplayPreference(value: boolean) {\n localStorage.setItem(this.userdisplayPreference, '' + value);\n }\n\n getUserDisplayPreference(): boolean {\n const value = localStorage.getItem(this.userdisplayPreference);\n return value == 'true';\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subscriber, BehaviorSubject } from 'rxjs';\nimport { CanvaButtonApi } from '../dto/canva.dto';\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { WiziBlockMediaDto } from '../dto/wizi-block-media.dto';\n\ndeclare let Canva : {\n DesignButton : {\n initialize: (opts: { apiKey: string }) => Promise<CanvaButtonApi>;\n }\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CanvaService {\n\n canvaApi; // Object use to manage the canva api\n canvaApiURL: string;\n canvaApiKey: string;\n canvaLogoRoute: string;\n\n private bindExpectedImgSizeEvent: BehaviorSubject<WiziBlockMediaDto> = new BehaviorSubject<WiziBlockMediaDto>(null);\n private bindExpectedSizeDone = this.bindExpectedImgSizeEvent.asObservable();\n\n constructor(\n private externalConfigService: ImgManagerConfigService\n ) { }\n\n private setCanvaApiConfig() {\n this.canvaApiURL = this.externalConfigService.getCanvaApiURL();\n this.canvaApiKey = this.externalConfigService.getCanvaApiToken();\n }\n\n getCanvaLogo() {\n return this.externalConfigService.getRouteAssets() + \"canva/icon_canva.svg\";\n }\n\n bindEventExepectedImgSizeChange() {\n return this.bindExpectedSizeDone;\n }\n\n expectedImgSizesChange (mediaDTO: WiziBlockMediaDto){\n this.bindExpectedImgSizeEvent.next(mediaDTO);\n }\n\n getCanvaApi():Observable<CanvaButtonApi> {\n if (!this.canvaApiURL || !this.canvaApiKey) {\n this.setCanvaApiConfig();\n }\n return new Observable(observer => {\n this.loadCanva().subscribe({\n complete: () => {\n if(this.canvaApi && Canva.DesignButton) {\n observer.next(this.canvaApi);\n observer.complete();\n } else {\n this.initializeCanva(observer);\n }\n }\n })\n });\n }\n\n private initializeCanva(observer: Subscriber<CanvaButtonApi>) {\n if (Canva.DesignButton) {\n Canva.DesignButton.initialize({\n apiKey: this.canvaApiKey\n\n }).then((canvaApi) => {\n this.canvaApi = canvaApi;\n observer.next(this.canvaApi);\n observer.complete();\n });\n }\n }\n\n private loadCanva():Observable<null> {\n return new Observable(observer => {\n if(this.canvaApi) {\n observer.complete();\n }else{\n this.loadCanvaScript(observer);\n }\n });\n }\n\n private loadCanvaScript(observer: Subscriber<null>) {\n\n const node = document.createElement('script');\n node.src = this.canvaApiURL;\n node.type = 'text/javascript';\n node.async = false;\n node.charset = 'utf-8';\n node.onload = () => {\n observer.complete();\n }\n document.getElementsByTagName('head')[0].appendChild(node);\n }\n}\n","import {Injectable} from '@angular/core';\nimport { Subject } from \"rxjs\";\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\n\n@Injectable({\n providedIn: 'root'\n })\nexport class ImgEventService {\n\n constructor() { }\n\n private imgToEditEvent: Subject<ImgPictureDTO> = new Subject<ImgPictureDTO>();\n private imgRemoved: Subject<string> = new Subject<string>();\n private imgAdded: Subject<string> = new Subject<string>();\n private listDisplayedChange: Subject<boolean> = new Subject<boolean>();\n\n emitImgRemoved(id_file: string){\n this.imgRemoved.next(id_file);\n }\n\n getImgRemovedEventListner(){\n return this.imgRemoved.asObservable();\n }\n\n emitImgToEdit(imgToEdit: ImgPictureDTO){\n this.imgToEditEvent.next(imgToEdit);\n }\n\n getImgToEditEventListner(){\n return this.imgToEditEvent.asObservable();\n }\n\n emitImgAdded(id_file: string){\n this.imgAdded.next(id_file);\n }\n\n getImgAddedEventListner(){\n return this.imgAdded.asObservable();\n }\n\n emitlistDisplayedChange(value: boolean){\n this.listDisplayedChange.next(value);\n }\n\n getlistDisplayedChange(){\n return this.listDisplayedChange.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DomService {\n private documentEventSource = new Subject();\n private documentEventDone = this.documentEventSource.asObservable();\n\n private documentScrollSource = new Subject();\n private documentScrollDone = this.documentScrollSource.asObservable();\n\n documentEvent() {\n return this.documentEventDone;\n }\n\n setDocumentEventListener() {\n document.body.addEventListener('click', event => {\n this.documentEventSource.next(event.target);\n });\n }\n\n documentScroll() {\n return this.documentScrollDone;\n }\n\n setScrollEventListener() {\n window.onscroll = () => {\n this.documentScrollSource.next(window);\n };\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from './services/img-selection.service';\nimport { ImgManagerConfigDto } from './dto/config/external/external-config.dto';\nimport { ImgManagerConfigService } from './services/config/external-config.service';\nimport { Subscription } from 'rxjs';\nimport { UserSettingsService } from './services/user-settings.service';\nimport { CanvaService } from './services/canva.service';\nimport { ImgEventService } from './services/img-event.service';\nimport { DomService } from './services/dom.service';\nimport { HostListener } from '@angular/core';\nimport { stateDisplayed } from '../public-api';\n\n@Component({\n selector: 'wz-img-manager',\n templateUrl: './wz-img-manager.component.html'\n})\nexport class WzImgManagerComponent implements OnInit {\n @Input() stateDisplayed: stateDisplayed;\n @Input() showSelection: boolean = false;\n @Input() externalConfig: ImgManagerConfigDto;\n @Output() imgManagerClosed = new EventEmitter();\n private _multipleImgMode: boolean = false;\n\n @Input() set multipleImgMode(activate: boolean) {\n this._multipleImgMode = activate;\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n }\n\n get multipleImgMode(): boolean {\n return this._multipleImgMode;\n }\n\n _showImgManagerModule: boolean = false;\n @Input() set showImgManagerModule(activate: boolean) {\n this._showImgManagerModule = activate;\n if (activate) {\n this.displaySmall();\n }\n }\n\n get showImgManagerModule(): boolean {\n return this._multipleImgMode;\n }\n\n @HostListener('document:keydown.escape', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n if (this.stateDisplayed && this.stateDisplayed !== 'window') {\n this.onClose();\n }\n }\n\n close: boolean = false\n selectImgEvent: Subscription;\n listDisplayed: boolean = false;\n listDisplayedEvent: Subscription;\n hideTab: boolean = false;\n // Save the defaut overflow apply to html tag, when the module is full open\n private overflowHTML: string;\n private bodyPadding: number;\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private externalConfigService: ImgManagerConfigService,\n private userSettingsService: UserSettingsService,\n private canvaService: CanvaService,\n private imgEventService: ImgEventService,\n private domService: DomService\n ) {}\n\n ngOnInit(): void {\n this.externalConfigService.setExternalConfig(this.externalConfig);\n this.imgSelectionService.setMultipleImgMode(this._multipleImgMode);\n this.imgSelectionService.initImgSelectedList(null);\n this.selectImgEvent = this.imgSelectionService.getImgSelectionChange().subscribe(imgSlection =>{\n\n if (imgSlection && imgSlection.length && this.checkCloseImgManager()) {\n // Close the img manager\n this.onClose();\n }\n });\n this.checkUserDisplayPreference();\n // Use when the img manager is full open or open in page. This display the user preference display, mosaic or list.\n this.listDisplayedEvent = this.imgEventService.getlistDisplayedChange().subscribe(value => this.listDisplayed = value);\n // Register dom service to listen on all event on the body to avoid having multiple instance of the same thing every where\n this.domService.setDocumentEventListener();\n }\n\n checkUserDisplayPreference() {\n if (this.stateDisplayed === 'window' || this.stateDisplayed === 'full') {\n this.listDisplayed = this.userSettingsService.getUserDisplayPreference();\n }\n }\n\n setCurrentTab(event) {\n if (event === 'img-edition') {\n this.hideTab = true;\n return;\n }\n this.hideTab = false;\n }\n\n displaySmall() {\n if (this.stateDisplayed !== 'window') {\n setTimeout(() => {\n this.stateDisplayed = 'small';\n this.addBodyBottomPaddingForModule();\n }, 10);\n }\n }\n\n openSmall() {\n this.stateDisplayed = 'small';\n this.setBodyMainScroll();\n this.listDisplayed = false;\n }\n\n openFull() {\n this.stateDisplayed = 'full';\n this.checkUserDisplayPreference();\n this.hideBodyMainScroll();\n }\n\n onClose() {\n this.stateDisplayed = 'closed';\n this.hideTab = false;\n this.setBodyMainScroll();\n this.removeBodyBottomPaddingForModule();\n // Wait the end of the closing annimation\n setTimeout(() => {\n this.imgManagerClosed.emit();\n }, 250);\n }\n\n onImgManagerClosed() {\n this.onClose();\n }\n\n /**\n * Close the img manager after one img is selected, if not in multiple img to select\n */\n checkCloseImgManager() {\n return !this.multipleImgMode && this.stateDisplayed !== 'window' ? true : false;\n }\n\n hideBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n\n if (!this.overflowHTML) {\n this.overflowHTML = html.style.overflowY;\n }\n\n html.style.overflowY = \"hidden\";\n }\n\n setBodyMainScroll() {\n const html = document.getElementsByTagName('html')[0];\n html.style.overflowY = this.overflowHTML ? this.overflowHTML : \"scroll\";\n }\n\n addBodyBottomPaddingForModule() {\n const body = document.getElementsByTagName('body')[0];\n this.bodyPadding = this.bodyPadding ? parseInt(body.style.paddingBottom) : 0;\n body.style.paddingBottom = this.bodyPadding + 300 + 'px';\n }\n\n removeBodyBottomPaddingForModule() {\n if (typeof this.bodyPadding !== 'undefined') {\n const body = document.getElementsByTagName('body')[0];\n body.style.paddingBottom = this.bodyPadding + 'px';\n this.bodyPadding = 0;\n }\n }\n\n changeDisplayTab() {\n this.stateDisplayed = 'full';\n }\n\n ngOnDestroy() {\n this.selectImgEvent.unsubscribe();\n this.canvaService.expectedImgSizesChange(null);\n this.listDisplayedEvent.unsubscribe();\n }\n}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\n\nexport const easeInOut = // the fade-in/fade-out animation.\ntrigger('easeInOut', [\n\n // the \"in\" style determines the \"resting\" state of the element when it is visible.\n state('in', style({opacity: 1})),\n\n // fade in when created. this could also be written as transition('void => *')\n transition(':enter', [\n style({opacity: 0}),\n animate('0.5s ease-in-out' )\n ]),\n]);\n","import { Injectable } from '@angular/core';\nimport { NwbAlertConfig, NwbAlertComponent } from '@wizishop/ng-wizi-bulma';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NwbAlertService } from '@wizishop/ng-wizi-bulma';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AlertService {\n\n actionMsg = 'ImgManager.alert.action';\n\n alertConfig: NwbAlertConfig = {\n message: '',\n duration: 5000\n }\n\n private alertRefComponent: NwbAlertComponent;\n\n constructor(\n private nwbAlertService: NwbAlertService,\n private translateService: TranslateService\n ) { }\n\n openAlert(msgKey: string) {\n this.closePreviousAlert();\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.setAlertColor(msgKey);\n\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n openAlertWithBackendRespons(msgKey: string, msgBackend: string) {\n this.translateService.get(msgKey).subscribe(trans => {\n this.alertConfig.message = trans;\n this.alertConfig.message += '<br/>' + JSON.parse(msgBackend).message;\n\n this.closePreviousAlert();\n this.alertRefComponent = this.nwbAlertService.open(this.alertConfig);\n this.alertRefComponent.afterClosed().subscribe();\n });\n }\n\n private closePreviousAlert() {\n if (this.alertRefComponent) {\n this.alertRefComponent.dismiss();\n }\n }\n\n private setAlertColor(msgKey: string) {\n const isErrorMsg: boolean = /error/i.test(msgKey);\n this.alertConfig.color = isErrorMsg ? 'is-danger' : 'is-success';\n }\n}\n","import {Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef} from '@angular/core';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport {ImgManagerConfigService} from \"../../services/config/external-config.service\";\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'img-upload',\n templateUrl: './img-upload.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgUploadComponent implements OnInit {\n\n files: any = [];\n isLoading: boolean = false;\n assetsIcon: string;\n @Input() stateDisplayed: stateDisplayed;\n @Output() imgUploaded = new EventEmitter();\n\n @ViewChild('dragAndDropBox') dragAndDropBox: ElementRef;\n\n loadingText = 'ImgManager.ImgUpload.loading';\n errorUploadingImg = 'ImgManager.ImgUpload.errorUploadingImg';\n errorNotImg = 'ImgManager.ImgUpload.errorNotImg';\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private externalConfigService: ImgManagerConfigService\n ) {}\n\n ngOnInit(): void {\n this.assetsIcon = this.getAssets();\n }\n\n filesChangeByClick(event: any) {\n this.uploadFile(event.target.files);\n }\n\n getAssets() {\n return this.externalConfigService.getRouteAssets() + \"img/icon_picture.svg\";\n }\n\n filesChangeByDragAndDrop(filesList: File[]) {\n this.removeDragAndDropStyle();\n this.uploadFile(filesList);\n }\n\n uploadFile(files: File[]) {\n if (files && !files.length) {\n return;\n }\n\n this.isLoading =true;\n const imgToUploadList: Observable<any>[] = [];\n for (const file of files) {\n\n const formData = new FormData();\n formData.append('image', file, file.name);\n\n if(!this.isFileImage(file.type)) {\n this.alertService.openAlert(this.errorNotImg);\n this.isLoading =false;\n continue;\n }\n imgToUploadList.push(this.imgManager.uploadFile(formData));\n }\n\n forkJoin(imgToUploadList).subscribe(\n (img: ImgPictureDTO[]) => {\n this.onImgUpload(img),\n this.isLoading =false;\n },\n error => {\n this.alertService.openAlert(this.errorUploadingImg);\n this.isLoading =false;\n }\n )\n }\n\n /**\n * Send the img uploaded to the tabs components,\n * Then the tabs components add the img to upload list by calling the method onImgUploaded of the upload-list component\n * @param img\n */\n onImgUpload(img: ImgPictureDTO[]) {\n this.imgUploaded.emit(img);\n }\n\n isFileImage(fileType: string) {\n return fileType.split('/')[0] === 'image';\n }\n\n /**\n * Remove the style of the drag and drop box\n * After an img is droped, the box is still grey\n */\n removeDragAndDropStyle() {\n this.dragAndDropBox.nativeElement.style = '';\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { ImgManagerService } from './img-manager.service';\nimport { AlertService } from './alert.service';\nimport { ImgPictureDTO } from '../dto/img-manager.dto';\nimport { PictureNameUpdate } from '../dto/picture-name-update.dto';\n\n@Injectable({providedIn: 'root'})\nexport class RenamePictureService {\n\n private picturesList: ImgPictureDTO[] = [];\n private pictureNameChanged: Subject<PictureNameUpdate> = new Subject<PictureNameUpdate>();\n\n private errorRenameImg = 'ImgManager.ImgList.errorRenameImg';\n private msgSavingImgName = 'ImgManager.ImgLib.savingImgName';\n private msgImgNameSaved = 'ImgManager.ImgLib.imgNameSaved';\n\n constructor(\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n )\n {\n this.setEvents();\n }\n\n setPicturesList(picturesList: ImgPictureDTO[]) {\n this.picturesList = picturesList;\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChanged.next(pictureRenamed);\n }\n\n private setEvents() {\n this.pictureNameChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe((pictureNameUpdate:PictureNameUpdate) => {\n this.renamePicture(pictureNameUpdate);\n });\n }\n\n private renamePicture(pictureNameUpdate: PictureNameUpdate) {\n const picture: ImgPictureDTO = this.getPictureById(pictureNameUpdate.id);\n if (!picture) {\n this.alertService.openAlert(this.errorRenameImg);\n return;\n }\n this.alertService.openAlert(this.msgSavingImgName);\n this.imgManager\n .changeImgName(picture.display_name, picture.id_file)\n .subscribe(\n (data: ImgPictureDTO) => {\n picture.display_name = data.display_name;\n this.alertService.openAlert(this.msgImgNameSaved);\n },\n (error) => {\n picture.display_name = pictureNameUpdate.previousName;\n this.alertService.openAlert(this.errorRenameImg);\n }\n );\n }\n\n private getPictureById(id_file: string): ImgPictureDTO {\n if (!this.picturesList) {\n return;\n }\n\n for (const picture of this.picturesList) {\n if(picture.id_file === id_file) {\n return picture;\n }\n }\n\n return null;\n }\n\n}","import { Component, OnInit, Input } from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { PictureNameUpdate, stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\n\n@Component({\n selector: 'upload-list',\n templateUrl: './upload-list.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class UploadListComponent implements OnInit {\n\n picturesList: ImgPictureDTO[] = [];\n imgSelectionChange: Subscription;\n selectImgEvent: Subscription;\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() multipleImgMode: boolean = false;\n\n constructor(\n private imgSelectionService: ImgSelectionService,\n private renamePictureService: RenamePictureService\n ) { }\n\n ngOnInit(): void {\n this.setEvents();\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n img.forEach(picture =>\n this.picturesList.push(picture)\n );\n this.renamePictureService.setPicturesList(this.picturesList);\n }\n\n onToggleSelectImg(index: number) {\n if (this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n private setEvents() {\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n ngOnDestroy(): void {\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import {Component, Input, OnInit, ViewChild, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { UploadListComponent } from '../upload-list/upload-list.component';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { NwbSnackbarConfig } from '@wizishop/ng-wizi-bulma';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\nimport {Router} from '@angular/router';\n\n@Component({\n selector: 'img-tabs',\n templateUrl: './img-tabs.component.html'\n})\nexport class ImgTabsComponent implements OnInit {\n\n @Input()\n multipleImgMode: boolean = false;\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n listDisplayed = false;\n\n @Output()\n imgManagerClosed = new EventEmitter();\n\n @Output()\n currentTab = new EventEmitter();\n\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n tabActive = 'images-view';\n tabs: string[] = ['img-upload', 'images-view', 'pexels-lib', 'img-edition'];\n editTab = false;\n\n imgToEdit: ImgPictureDTO;\n\n imgUpload = false;\n\n @ViewChild( 'imgUploadedImg' )\n imgUploadedComponent: UploadListComponent ;\n\n snackBarNewVersionConfig: NwbSnackbarConfig = {\n message: '',\n duration: 3000\n };\n\n constructor(\n private imgEventEditService: ImgEventService,\n private alertService: AlertService,\n private route: Router\n ) { }\n\n ngOnInit(): void {\n this.imgEventEditService.getImgToEditEventListner().subscribe(imgToEdit =>{\n this.tabActive = this.tabs[3];\n this.imgToEdit = imgToEdit;\n this.editTab = true;\n this.currentTab.emit(this.tabs[3]);\n });\n }\n\n toggleTabs(value: string) {\n this.imgUpload = false;\n this.editTab = false;\n this.tabActive = value;\n }\n\n onImgUploaded(img: ImgPictureDTO[]) {\n this.imgUpload = true;\n this.imgUploadedComponent.onImgUploaded(img);\n }\n\n onEditClosed(msgKey: string) {\n this.editTab = false;\n this.toggleTabs(this.tabs[1]);\n if (msgKey) {\n this.alertService.openAlert(msgKey);\n }\n this.currentTab.emit('close');\n }\n\n onShowImgUploaded() {\n this.tabActive = this.tabs[1];\n }\n\n switchDisplayWindowImgView() {\n this.switchDisplayWindow.emit(true);\n }\n\n switchRouterLink(event) {\n\n }\n\n onImgManagerClosed() {\n this.imgManagerClosed.emit();\n }\n}\n","import { Directive, Output, EventEmitter, HostBinding, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[appDragDrop]'\n})\nexport class DragDropDirective {\n\n @Output() onFileDropped = new EventEmitter<Event>();\n\n @HostBinding('style.background-color') background = '#fff'\n @HostBinding('style.opacity') opacity = '1'\n\n @HostListener('dragover', ['$event']) onDragOver(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5';\n this.opacity = '0.8';\n }\n\n @HostListener('dragleave', ['$event']) public onDragLeave(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#fff';\n this.opacity = '1';\n }\n\n @HostListener('drop', ['$event']) public ondrop(evt: any) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#f5f5f5'\n this.opacity = '1'\n const files = evt.dataTransfer.files;\n if (files.length > 0) {\n this.onFileDropped.emit(files);\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient, HttpHeaders} from '@angular/common/http';\nimport { map} from \"rxjs/operators\";\nimport {Observable} from \"rxjs\";\nimport {WzImgLibDto} from \"../dto/pexels-img.dto\";\nimport { ImgManagerConfigService } from './config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PexelsService {\n apiBaseUrl;\n apiKey;\n lang: string;\n languages = {'fr': 'fr-FR', 'en': 'en-US', 'it': 'it-IT', 'es': 'es-ES'};\n\n constructor(\n private http: HttpClient,\n private externalConfigService: ImgManagerConfigService,\n private translateService: TranslateService\n ) {\n this.setLang(this.translateService.currentLang);\n this.translateService.onLangChange.subscribe(langData => {\n this.setLang(langData.lang);\n })\n }\n\n setLang(lang: string) {\n this.lang = this.languages[lang] ? this.languages[lang] : 'fr-FR';\n }\n\n searchOnPexels(toSearch: string, perPage: number, page: number): Observable<WzImgLibDto> {\n if(!this.apiBaseUrl || this.apiKey) {\n this.apiBaseUrl = this.externalConfigService.getPexelsApiURL();\n this.apiKey = this.externalConfigService.getPexelsApiToken();\n }\n\n const httpOptions = {\n headers: new HttpHeaders({\n Authorization: 'Bearer ' + this.apiKey\n })\n };\n\n let request;\n\n // If search value is not empty or blank\n if (toSearch && !/^\\s*$/.test(toSearch)) {\n request = `/search?query=${toSearch}&per_page=${perPage}&page=${page}&locale=${this.lang}`;\n\n } else { // Search by category or display Pexels selection\n const shopCategory = this.externalConfigService.getShopCategory();\n\n // Search by shop category\n if (shopCategory && shopCategory !== 'other' && shopCategory !== 'btob') {\n request = `/search?query=${shopCategory}&per_page=${perPage}&page=${page}&locale=en-US`;\n } else { // Display Pexels selection\n request = `/curated?per_page=${perPage}&page=${page}`;\n }\n }\n\n return this.http.get(this.apiBaseUrl + request, httpOptions).pipe(\n map((data: WzImgLibDto) => {\n return data;\n })\n );\n }\n}\n","import { stagger } from '@angular/animations';\nimport { query } from '@angular/animations';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nexport const listAnnimation = // the fade-in/fade-out animation.\ntrigger('listAnimation', [\n transition(':enter, * => 0, * => -1', []),\n transition(':increment', [\n query(':enter', [\n style({opacity: 0, transform: 'translateY(100px)'}),\n stagger(50, [\n animate('500ms cubic-bezier(0.35, 0, 0.25, 1)', style({ opacity: 1, transform: 'none' })),\n ]),\n ], { optional: true })\n ]),\n]);\n","import {AfterViewInit, Component, ElementRef, OnInit, ViewChild, Input, Output, EventEmitter} from '@angular/core';\nimport {PexelsService} from '../../services/pexels.service';\nimport {Subject, Subscription} from 'rxjs';\nimport {WzImgLibDto, PhotosColumns, WzImgLibPhotoDto} from '../../dto/pexels-img.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { TranslateService } from '@ngx-translate/core';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { listAnnimation } from '../../animations/listAnnimation/list.animation';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'pexels-lib',\n templateUrl: './pexels-lib.component.html',\n animations: [\n easeInOut,\n listAnnimation\n ]\n})\nexport class PexelLibComponent implements OnInit, AfterViewInit {\n\n @Input()\n stateDisplayed: stateDisplayed;\n @Input()\n searchValue: string = '';\n /** Pass to true to hide search input */\n @Input()\n disableSearch: boolean = false;\n\n @Output()\n showImgUploaded = new EventEmitter();\n\n perPage = 30;\n searchUpdated = new Subject();\n oldSearchValue: string;\n nbResult = 0;\n wzImgLibDto: WzImgLibDto;\n currentPage = 1;\n isLoading = true;\n initComponent = true;\n photosColumns: PhotosColumns[] = [];\n nbColumuns = 6;\n responsiveColumns = [1250, 1050, 750, 500];\n outerElement = null;\n\n uploadingImg = 'ImgManager.PexelLib.uploadingImg';\n untitled = 'ImgManager.PexelLib.untitled';\n successUploadPhoto = 'ImgManager.PexelLib.successImport';\n errorUploadPhoto = 'ImgManager.PexelLib.errorUploadPhoto';\n errorRetrievePhotos = 'ImgManager.PexelLib.errorRetrievePhotos';\n\n private subs: Subscription[] = [];\n\n @ViewChild('outerElement') set content(control: ElementRef) {\n this.outerElement = control;\n }\n\n constructor(\n private wzImgLibService: PexelsService,\n private imgManager: ImgManagerService,\n private alertService: AlertService,\n private translateService: TranslateService\n ) { }\n\n ngOnInit(): void {\n }\n\n ngAfterViewInit() {\n this.oldSearchValue = this.searchValue;\n this.isLoading = false;\n\n this.setNbColumnsToDisplayPhoto();\n this.setPhotosColumns();\n this.search();\n }\n\n setNbColumnsToDisplayPhoto(): void {\n const width = this.outerElement.nativeElement.offsetWidth;\n\n if (this.stateDisplayed !== 'window') {\n this.nbColumuns = 8;\n }\n\n this.responsiveColumns.forEach(value => {\n if (width < value) {\n this.nbColumuns--;\n }\n });\n }\n\n onSearchNameChanged() {\n this.onSearchChange();\n }\n\n onBottomReached() {\n this.scrollHandler();\n }\n\n onSearchChange() {\n this.search();\n }\n\n search() {\n if (this.isLoading) {\n return;\n }\n if (this.searchValue !== this.oldSearchValue) {\n this.resetSearch();\n }\n\n // All the picture are displayed\n if (this.nbResult && this.nbResult <= (this.currentPage - 1) * this.perPage) {\n return;\n }\n\n this.isLoading = true;\n const searchSub = this.wzImgLibService.searchOnPexels(this.searchValue, this.perPage, this.currentPage).subscribe(\n (data: WzImgLibDto) => {\n this.wzImgLibDto = data;\n this.nbResult = this.wzImgLibDto.total_results;\n\n if (this.nbResult) {\n data.photos.forEach(photo => {\n const bestColumnIndex = this.getBestColumn();\n const height = (photo.height / photo.width) * 1000;\n\n this.photosColumns[bestColumnIndex].height += height;\n this.photosColumns[bestColumnIndex].photos.push(photo);\n });\n }\n\n this.isLoading = false;\n this.initComponent = false;\n },\n error => {\n this.isLoading = false;\n this.initComponent = false;\n this.alertService.openAlert(this.errorRetrievePhotos);\n }\n );\n\n this.subs.push(searchSub);\n }\n\n scrollHandler() {\n if (this.isLoading) {\n return;\n }\n const bestColumnIndex = this.getBestColumn();\n const lastPic = this.photosColumns[bestColumnIndex].photos[this.photosColumns[bestColumnIndex].photos.length - 1];\n const lastPhoto = lastPic ? document.querySelector<HTMLImageElement>('img[src=\"' + lastPic.src.medium + '\"]') : null;\n\n if (lastPhoto) {\n if (!this.isLoading) {\n this.currentPage += 1;\n this.search();\n }\n }\n }\n\n setPhotosColumns() {\n for (let indexColumn=0; indexColumn < this.nbColumuns ; indexColumn++) {\n const photosColumn: PhotosColumns = {\n height: 0,\n photos: []\n };\n this.photosColumns.push(photosColumn);\n }\n }\n\n getBestColumn(): number {\n const bestColumn = {\n index: 0,\n height: this.photosColumns[0].height\n };\n this.photosColumns.forEach((photosColumn, index) => {\n if (bestColumn.height > photosColumn.height) {\n bestColumn.index = index;\n bestColumn.height = photosColumn.height;\n }\n });\n return bestColumn.index;\n }\n\n resetSearch() {\n this.oldSearchValue = this.searchValue;\n this.photosColumns = [];\n this.currentPage = 1;\n this.setPhotosColumns();\n }\n\n uploadPhoto(photo: WzImgLibPhotoDto, url: string) {\n photo.uploading = true;\n\n const uploadSub = this.imgManager.uploadFileByUrl(url, this.translateService.instant(this.untitled)).subscribe(\n (img: ImgPictureDTO) => {\n photo.uploading = false;\n photo.uploaded = true;\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n photo.uploading = false;\n if(error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadPhoto, error.error.message);\n } else {\n this.alertService.openAlert(this.errorUploadPhoto);\n }\n });\n\n // Display img uploading msg\n this.alertService.openAlert(this.uploadingImg);\n this.subs.push(uploadSub);\n }\n\n ngOnDestroy(): void {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Directive, Input, Output } from \"@angular/core\";\nimport { EventEmitter } from '@angular/core';\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { Subscription } from \"rxjs\";\nimport { stateDisplayed } from \"../../dto/export-dtos.api\";\nimport { PictureNameUpdate } from \"../../dto/picture-name-update.dto\";\nimport { ImgPictureDTO } from \"../../dto/img-manager.dto\";\nimport { AlertService } from \"../../services/alert.service\";\nimport { ImgManagerConfigService } from \"../../services/config/external-config.service\";\nimport { ImgCDNService } from \"../../services/config/img-cdn.service\";\nimport { ImgEventService } from \"../../services/img-event.service\";\nimport { ImgManagerService } from \"../../services/img-manager.service\";\nimport { ImgSelectionService } from \"../../services/img-selection.service\";\nimport { TableFilters } from \"../../services/table/filters-table.service\";\n\n@Directive()\nexport abstract class ImagesActionHandler {\n @Input()\n picturesList: ImgPictureDTO[] = [];\n @Output()\n picturesListChange: EventEmitter<void> = new EventEmitter();\n\n @Input()\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 30,\n currentPage: 1\n };\n @Input()\n displayPexelsResults: boolean = false;\n\n @Input()\n disable: boolean = false;\n @Output()\n disableChange: EventEmitter<boolean> = new EventEmitter();\n\n @Output()\n filtersChange = new EventEmitter();\n @Output()\n pictureNameChange: EventEmitter<PictureNameUpdate> = new EventEmitter();\n\n @Input() isLoading = false;\n\n @Input()\n stateDisplayed: stateDisplayed;\n\n previousName: string; // Use to save the previous picture name, when a user change his name\n fakeImgRoute: string;\n\n private getDataAPISub: Subscription;\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n private errorAlreadyUsedImg = 'ImgManager.ImgList.errorAlreadyUsed';\n\n constructor(\n protected imgManager: ImgManagerService,\n protected imgSelectionService: ImgSelectionService,\n protected http: HttpClient,\n protected imgCDNService: ImgCDNService,\n protected imgEventCardService: ImgEventService,\n protected alertService: AlertService,\n protected translateService: TranslateService,\n protected externalService: ImgManagerConfigService\n ) {\n this.fakeImgRoute = this.externalService.getRouteAssets() + 'img/fake.png';\n }\n\n /** Event emit when the header checkbox is checked */\n onToggleAllCheckBoxRow(event) {\n this.picturesList.forEach(data => {\n data.delSelected = event;\n });\n this._pictureListeChange();\n }\n\n onToggleDelSelection(index: number) {\n if (this.disable) {\n return;\n }\n this.picturesList[index].delSelected = !this.picturesList[index].delSelected;\n this._pictureListeChange();\n }\n\n /** Event emit each time filters change */\n onFiltersChange() {\n this.filtersChange.emit();\n }\n\n onEdit(picture: ImgPictureDTO) {\n this.imgEventCardService.emitImgToEdit(picture);\n }\n\n onToggleSelectImg(index: number) {\n if (this.disable || this.stateDisplayed === 'window') {\n return;\n }\n if (!this.picturesList[index].selected) {\n this.imgSelectionService.addImgSelected(this.picturesList[index]);\n this.picturesList[index].selected = true;\n } else {\n this.imgSelectionService.removeImgSelectedById(this.picturesList[index].id_file);\n this.picturesList[index].selected = false;\n }\n }\n\n onRemoveImg(picture: ImgPictureDTO) {\n picture.deleted = true;\n this.imgManager.removeImg(picture.id_file).subscribe(\n data => {\n this.imgEventCardService.emitImgRemoved(picture.id_file);\n this.imgSelectionService.removeImgSelectedById(picture.id_file);\n },\n error => {\n const msg = error.status === 409 ? this.errorAlreadyUsedImg: this.errorRemoveImg;\n picture.deleted = false;\n this.alertService.openAlert(msg);\n });\n }\n\n onPictureNotLoading(event) {\n event.target.src = this.fakeImgRoute;\n }\n\n onDownloadImg(display_name: string, file_name: string) {\n this.http.get(this.getRAWImgRoute(file_name), { responseType: 'blob' }).subscribe(val => {\n let url = URL.createObjectURL(val);\n this.downloadUrl(url, display_name);\n URL.revokeObjectURL(url);\n });\n }\n\n onNameChange(id_file: string) {\n this.pictureNameChange.emit({id: id_file, previousName: this.previousName});\n }\n\n private getRAWImgRoute(file_name: string){\n return this.imgCDNService.getUrlImg('raw') + file_name;\n }\n\n private _pictureListeChange() {\n this.picturesListChange.emit();\n }\n\n private downloadUrl(url: string, fileName: string) {\n const a: any = document.createElement('a');\n a.href = url;\n a.download = fileName;\n a.click();\n }\n\n ngDestroy() {\n if (this.getDataAPISub) {\n this.getDataAPISub.unsubscribe();\n }\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgEventService } from '../../../../services/img-event.service';\nimport { ImgPictureDTO } from '../../../../dto/img-manager.dto';\nimport { HttpClient } from '@angular/common/http';\nimport { ImgManagerService } from '../../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../../services/img-selection.service';\nimport { ImgCDNService } from '../../../../services/config/img-cdn.service';\nimport { ImgManagerConfigService } from '../../../../services/config/external-config.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ImagesActionHandler } from '../../images-actions-handler';\nimport { easeInOut } from '../../../../animations/easeInOut/ease-in-out.animation'\nimport { tabDisplayed } from '../../../../dto/export-dtos.api';\nimport { AlertService } from '../../../../services/alert.service';\n\n@Component({\n selector: 'img-card',\n templateUrl: './img-card.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgCardComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n picture: ImgPictureDTO;\n @Input()\n index: number;\n focusInput = false;\n\n @Output()\n toggleImgSelected: EventEmitter<void> = new EventEmitter();\n\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n isUploadSection: boolean = false;\n activeConfirmDelete = false;\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n this.isUploadSection = this.tabDisplayed === 'img-upload';\n }\n\n displayLargeWindow(): void {\n this.switchDisplayWindow.emit(true);\n }\n\n onToggleImgSelected() {\n this.toggleImgSelected.next();\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { Observable, forkJoin } from 'rxjs';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\n\n@Component({\n selector: 'img-editor',\n templateUrl: './img-editor.component.html',\n animations: [\n easeInOut\n ]\n})\nexport class ImgEditorComponent implements OnInit {\n\n @Input()\n stateDisplayed;\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Output() editClosed = new EventEmitter();\n\n isLoading: boolean = false;\n isImgModified: boolean = false;\n isNameModified: boolean = false;\n currentCroppedImage: string = ''; // Img modified return in base64 by the cropper\n private previousName: string;\n\n msgFailSave: string = 'ImgManager.ImgEditor.msgFailSave';\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n msgSuccessEdit: string = \"Les modifications de l'image ont bien été enregistrées.\"\n\n constructor(\n private imgManagerService: ImgManagerService,\n ) { }\n\n ngOnInit(): void {\n this.previousName = this.imgToEdit.display_name;\n }\n\n onSave() {\n if (this.isLoading) {\n return;\n }\n this.isLoading = true;\n\n if (!this.isImgModified && !this.isNameModified) {\n this.isLoading = false;\n this.onEditClosed();\n }\n\n const obsReplaceImg: Observable<any> = this.imgManagerService.replaceImg(this.currentCroppedImage, this.imgToEdit.id_file);\n const obsChangeImgName: Observable<any> = this.imgManagerService.changeImgName(this.imgToEdit.display_name, this.imgToEdit.id_file);\n\n if(this.isImgModified && this.isNameModified) {\n this.ranameAndReplaceImg(obsChangeImgName, obsReplaceImg);\n return;\n }\n\n if(this.isImgModified){\n obsReplaceImg.subscribe(data => {\n this.isLoading = false;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.currentCroppedImage = '';\n this.onEditClosed(this.msgFailSave);\n });\n return;\n }\n\n if (this.isNameModified) {\n obsChangeImgName.subscribe(data => {\n this.isLoading = false;\n this.previousName = this.imgToEdit.display_name;\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.isLoading = false;\n this.imgToEdit.display_name = this.previousName;\n this.onEditClosed(this.msgFailSave);\n });\n }\n this.isNameModified = false;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestartEdit() {\n this.isImgModified = false;\n this.isNameModified = false;\n this.imgToEdit.display_name = this.previousName;\n }\n\n onCancel() {\n this.onEditClosed('');\n }\n\n onImgCropped(imgBase64: string) {\n this.currentCroppedImage = imgBase64;\n }\n\n private ranameAndReplaceImg(obsChangeImgName: Observable<any>, obsReplaceImg: Observable<any>) {\n // Avoid to use forkjoin, because it can create conflict and loos the img\n obsChangeImgName.subscribe(\n res1 => {\n obsReplaceImg.subscribe(\n res2 => {\n this.onEditClosed(this.msgSuccessEdit);\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n },\n error => {\n this.onEditClosed(this.msgFailSave);\n }\n );\n }\n}\n","import {Component, OnInit, Output, EventEmitter, Input, OnDestroy, Inject, Renderer2} from '@angular/core';\nimport { CanvaService } from '../../services/canva.service';\nimport { CanvaButtonApi } from '../../dto/canva.dto';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { WiziBlockMediaDto } from '../../dto/wizi-block-media.dto';\nimport { Subscription } from 'rxjs';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { AlertService } from '../../services/alert.service';\nimport { stateDisplayed } from '../../dto/export-dtos.api';\nimport { CanvaCreateDesign } from '../../dto/canva-create-design.dto';\n\n@Component({\n selector: 'canva-btn',\n templateUrl: './canva-btn.component.html'\n})\nexport class CanvaBtnComponent implements OnInit, OnDestroy {\n\n @Input() stateDisplayed: stateDisplayed;\n\n @Output() showImgUploaded = new EventEmitter();\n\n canvaApi: CanvaButtonApi;\n canvaLogoRouteAssets: string;\n imgLoading = false;\n\n availableFormat = {\n 'ImgManager.CanvaBtn.smallSquare' : {\n 'width' : 500,\n 'height' : 500\n },\n 'ImgManager.CanvaBtn.mediumSquare' : {\n 'width' : 1000,\n 'height' : 1000\n },\n 'ImgManager.CanvaBtn.bigSquare' : {\n 'width' : 2500,\n 'height' : 2500\n }\n }\n\n openDropDownMenu: boolean = false;\n\n expectedHeight: number;\n expectedWidth: number;\n subs: Subscription[] = [];\n\n uploadingImg = 'ImgManager.CanvaBtn.uploadingImg';\n successUploadPhoto = 'ImgManager.CanvaBtn.successImport';\n errorUploadCanvaImg = 'ImgManager.CanvaBtn.errorUploadCanvaImg';\n errorRenameCanvaImg = 'ImgManager.CanvaBtn.errorRenameCanvaImg';\n\n constructor(\n private canvaService: CanvaService,\n private imgManager: ImgManagerService,\n private wzImgEventService: ImgEventService,\n private translateService: TranslateService,\n private alertService: AlertService,\n private renderer: Renderer2\n ) { }\n\n ngOnInit(): void {\n this.canvaLogoRouteAssets = this.canvaService.getCanvaLogo();\n this.listenCanvaExpectedSize();\n }\n\n listenCanvaExpectedSize() {\n // Subcribe to askImg from wizi-block\n const subExpectedImgSizesChange =\n this.canvaService.bindEventExepectedImgSizeChange().subscribe( (mediaDTO: WiziBlockMediaDto) => {\n if (mediaDTO) {\n this.expectedWidth = parseInt(mediaDTO.image_width, 10);\n this.expectedHeight = parseInt(mediaDTO.image_height, 10);\n } else {\n this.expectedWidth = undefined;\n this.expectedHeight = undefined;\n }\n });\n this.subs.push(subExpectedImgSizesChange);\n }\n\n onOpenCanva(width: number, height: number) {\n if (this.imgLoading) {\n return;\n }\n const subCanvaApi =\n this.canvaService.getCanvaApi().subscribe((api: CanvaButtonApi) => {\n this.canvaApi = api;\n this.addOverflowBody();\n this.createDesign(width, height);\n });\n this.subs.push(subCanvaApi);\n }\n\n private createDesign(width: number, height: number) {\n const createDesign: CanvaCreateDesign = {\n type: 'EtsyShopIcon',\n dimensions : {\n units: 'px',\n width: width ? width : undefined,\n height: height ? height : undefined,\n },\n publishLabel: this.translateService.instant('ImgManager.CanvaBtn.publish'),\n };\n this.canvaApi.createDesign({\n design: createDesign,\n onDesignPublish: ({ exportUrl, designTitle }) => this.designPublished(exportUrl, designTitle),\n onDesignClose: () => {\n this.removeOverflowBody();\n }\n\n });\n }\n\n private designPublished(exportUrl: string, designTitle: string) {\n this.alertService.openAlert(this.uploadingImg);\n this.imgLoading = true;\n\n const subUploadImg =\n this.imgManager.uploadFileByUrl(exportUrl, designTitle).subscribe(\n (img: ImgPictureDTO) => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n this.wzImgEventService.emitImgAdded(img.id_file);\n this.alertService.openAlert(this.successUploadPhoto);\n },\n error => {\n this.imgLoading = false;\n this.removeOverflowBody();\n\n if (error.error.code === 406 && error.error.message) {\n this.alertService.openAlertWithBackendRespons(this.errorUploadCanvaImg, error.error.message)\n } else {\n this.alertService.openAlert(this.errorUploadCanvaImg);\n }\n }\n );\n\n this.subs.push(subUploadImg);\n\n }\n\n private addOverflowBody() {\n this.renderer.addClass(document.body, 'ovh-canva');\n }\n\n private removeOverflowBody() {\n this.renderer.removeClass(document.body, 'ovh-canva');\n }\n\n ngOnDestroy() {\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { ImgPictureDTO } from '../../dto/img-manager.dto';\nimport {CdkDragDrop} from '@angular/cdk/drag-drop';\nimport { tabDisplayed } from '../../dto/export-dtos.api';\n\n\n@Component({\n selector: 'img-selection',\n templateUrl: './img-selection.component.html'\n})\nexport class ImgSelectionComponent implements OnInit {\n\n @Input() tabDisplayed: tabDisplayed;\n @Output() imgManagerClosed = new EventEmitter();\n\n imgSelectedList: ImgPictureDTO[] = [];\n removingAll: boolean = false;\n cancellingAll: boolean = false;\n importingAll: boolean = false;\n dragStart = false;\n isLoading: boolean = false;\n trashPositionIndex = 0;\n trashPositionLeft = '-5px';\n\n constructor(\n private imgSelectionService: ImgSelectionService\n ) { }\n\n ngOnInit(): void {\n this.getImgSelected();\n this.imgSelectionService.getImgListLoadingEventListner().subscribe(loading => {\n this.isLoading = loading;\n })\n }\n\n init() {\n this.removingAll = false;\n this.cancellingAll = false;\n this.importingAll = false;\n }\n\n getImgSelected() {\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n removeImg(index: number) {\n this.imgSelectionService.removeImgSelectedByIndex(index);\n }\n\n drop(event: CdkDragDrop<string[]>) {\n if (event.previousIndex !== event.currentIndex) {\n this.imgSelectionService.moveImgOrder(event);\n }\n }\n\n removeImgFromSelection(event: CdkDragDrop<string[]>) {\n this.imgSelectionService.removeImgSelectedByIndex(event.previousIndex);\n }\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[btnLoadingAnim]'\n})\nexport class LoadingDirective {\n\n element: ElementRef;\n currentLoading = 0;\n interval = null;\n\n constructor(el: ElementRef) {\n this.element = el;\n this.launchLoading();\n }\n\n launchLoading() {\n if (this.interval !== null) {\n return;\n }\n this.currentLoading = 10;\n\n this.element.nativeElement.style.width = this.currentLoading + '%';\n\n this.interval = setInterval(() => {\n if (this.currentLoading < 80) {\n this.currentLoading += Math.floor(Math.random() * 15);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n if (this.currentLoading >= 80 && this.currentLoading < 95) {\n this.currentLoading += Math.floor(Math.random() * 2);\n this.element.nativeElement.style.width = this.currentLoading + '%';\n }\n }, 70);\n }\n\n ngOnDestroy() {\n if (this.interval) {\n clearInterval(this.interval);\n this.interval = null;\n }\n }\n}\n","import { Directive, ElementRef, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\nimport { DomService } from '../services/dom.service';\n\n@Directive({\n selector: '[wzAutoHide]'\n})\nexport class AutoHideDirective implements AfterViewInit {\n @Input() triggerElement: string;\n @Input() forceOn: Array<string> = null;\n\n constructor(private _elementRef: ElementRef, private domService: DomService) {}\n\n @Output('clickOutside') clickOutside: EventEmitter<any> = new EventEmitter();\n\n ngAfterViewInit(): void {\n this.domService.documentEvent().subscribe((targetElement: Element) => {\n const clickedInside = this._elementRef.nativeElement.contains(targetElement);\n const classNameFromElement = targetElement.getAttribute('class');\n\n if (!clickedInside && (classNameFromElement === null || !classNameFromElement.includes(this.triggerElement))) {\n this.clickOutside.emit(null);\n }\n\n if (this.forceOn != null && classNameFromElement !== null) {\n let needToClose = true;\n this.forceOn.forEach(v => {\n if (!classNameFromElement.includes(v)) {\n needToClose = false;\n }\n });\n if (needToClose) {\n this.clickOutside.emit(null);\n }\n }\n });\n }\n}\n","import { Directive, Input, Output, EventEmitter, HostListener } from \"@angular/core\";\n\n@Directive({ selector: '[copy-clipboard]' })\nexport class CopyClipboardDirective {\n\n @Input(\"copy-clipboard\")\n public payload: string;\n\n @Output(\"copied\")\n public copied: EventEmitter<string> = new EventEmitter<string>();\n\n @HostListener(\"click\", [\"$event\"])\n public onClick(event: MouseEvent): void {\n\n event.preventDefault();\n if (!this.payload)\n return;\n\n let listener = (e: ClipboardEvent) => {\n let clipboard = e.clipboardData || window[\"clipboardData\"];\n clipboard.setData(\"text\", this.payload.toString());\n e.preventDefault();\n\n this.copied.emit(this.payload);\n };\n\n document.addEventListener(\"copy\", listener, false)\n document.execCommand(\"copy\");\n document.removeEventListener(\"copy\", listener, false);\n }\n}","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'dropdown',\n templateUrl: './dropdown.component.html'\n})\nexport class DropdownComponent implements OnInit {\n\n @Input()\n dropDownMenuClass: string;\n @Input()\n disable: boolean = false;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { EventEmitter } from '@angular/core';\nimport { Output } from '@angular/core';\nimport { Component, OnInit, Input } from '@angular/core';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { AlertService } from '../../../services/alert.service';\n\n@Component({\n selector: 'info-section',\n templateUrl: './info-section.component.html'\n})\nexport class EditorInfoSectionComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isNameModified(isNameModified: boolean) {\n this._isNameModified = isNameModified;\n }\n get isNameModified(): boolean {\n return this._isNameModified;\n }\n private _isNameModified: boolean = false;\n\n @Output()\n isNameModifiedChange = new EventEmitter<boolean>();\n\n imgName: string;\n imgRoute: string;\n\n msgCopyToClipBoard: string = 'ImgManager.ImgEditor.copytoClipBoard';\n\n constructor(\n private alertService: AlertService,\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgName = this.imgToEdit.display_name;\n }\n getFileSize() {\n return this.imgToEdit ? Math.round(parseInt(this.imgToEdit.size)/1000) : '-';\n }\n\n copyToClipBoard(event) {\n this.alertService.openAlert(this.msgCopyToClipBoard);\n }\n\n onNameChange() {\n this.isNameModifiedChange.emit(true);\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\n\nexport const insertRemove = // the fade-in/fade-out animation.\ntrigger('insertRemoveAnnim', [\n transition(':enter', [\n style({ opacity: 0 }),\n animate('0.5s ease-in-out', style({ opacity: 1 })),\n ])\n]);\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper';\nimport { insertRemove } from '../../../animations/insertRemove/insert-remove.animation';\nimport { CropperConfigDTO, ImgCropperConfigDTO } from '../../../dto/img-editor-config.dto';\nimport { ImgPictureDTO } from '../../../dto/img-manager.dto';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\n\n@Component({\n selector: 'cropper',\n templateUrl: './cropper.component.html',\n animations: [\n insertRemove\n ]\n})\nexport class CropperComponent implements OnInit {\n\n @Input()\n imgToEdit: ImgPictureDTO;\n\n @Input()\n set isImgModified(isImgModified: boolean) {\n this._isImgModified = isImgModified;\n if (!isImgModified) {\n this.restartEdit();\n }\n }\n get isImgModified(): boolean {\n return this._isImgModified;\n }\n private _isImgModified: boolean = false;\n\n @Output()\n isImgModifiedChange = new EventEmitter<boolean>();\n\n @Output()\n editClosed = new EventEmitter();\n\n @Output()\n currentCroppedImageChange = new EventEmitter<string>();\n\n msgFailLoad: string = 'ImgManager.ImgEditor.msgFailLoad';\n\n\n isNameModified: boolean = false;\n isCropperReady: boolean = false; // Use to not display the crop validation btn, after the img is loaded or changed\n currentCroppedImage: string = ''; // Img modified return in base64\n isCropped: boolean = false;\n isLoading: boolean = false;\n isImgCropped: boolean = false;\n isImgCroppedInitilized: boolean = false;\n\n // Image Cropper properties\n imgType: string;\n imgRoute: string;\n imageChangedEvent: any = '';\n croppedImage: any = '';\n canvasRotation = 0;\n rotation = 0;\n scale = 1;\n showCropper = false;\n containWithinAspectRatio = false;\n transform: ImageTransform = {};\n\n defaultAspectRatio: number;\n\n // dropdown list\n resolutionConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.origin',\n config: {\n maintainAspectRatio: true\n },\n },\n {\n label: 'ImgManager.ImgEditor.config.free',\n config: {\n maintainAspectRatio: false\n },\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.square',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 1 / 1\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.Portrait',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 3 / 4\n }\n },\n {\n label: 'ImgManager.ImgEditor.config.landscape',\n config: {\n maintainAspectRatio: true,\n aspectRatio: 5 / 3\n }\n }\n ];\n\n rotationConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.schedule',\n icon: \"fal fa-redo-alt\",\n method: \"rotateRight\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.AntiSchedule',\n icon: \"fal fa-undo-alt\",\n method: \"rotateLeft\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipVert',\n icon: \"fal fa-sort-alt\",\n method: \"flipVertical\"\n },\n {\n label: 'ImgManager.ImgEditor.config.flipHoriz',\n icon: \"fal fa-exchange-alt\",\n method: \"flipHorizontal\"\n }\n ];\n\n zoomConfig:ImgCropperConfigDTO[] = [\n {\n label: 'ImgManager.ImgEditor.config.zoom',\n icon: \"fal fa-search-plus\",\n method: \"zoomIn\",\n active: true\n },\n {\n label: 'ImgManager.ImgEditor.config.dezoom',\n icon: \"fal fa-search-minus\",\n method: \"zoomOut\"\n }\n ];\n\n // Img cropper variables\n imgCropperConfig:CropperConfigDTO = {\n maintainAspectRatio: false,\n aspectRatio: undefined\n }\n\n constructor(\n private imgCDNService: ImgCDNService\n ) { }\n\n ngOnInit(): void {\n this.init();\n }\n\n init() {\n this.imgRoute = this.getRAWImgRoute();\n this.imgType = this.getImgType();\n this.croppedImage = null;\n this.setDefautAspectRatio();\n }\n\n getRAWImgRoute(){\n return this.imgCDNService.getUrlImg('raw') + this.imgToEdit.file_name;\n }\n\n getImgType() {\n return this.imgToEdit.file_name ? this.imgToEdit.file_name.split('.').pop() : undefined;\n }\n\n setDefautAspectRatio() {\n const height = parseInt(this.imgToEdit.raw_height);\n const width = parseInt(this.imgToEdit.raw_width);\n this.defaultAspectRatio = height / width;\n this.resolutionConfig[0].config.aspectRatio = this.defaultAspectRatio;\n this.imgCropperConfig.aspectRatio = this.defaultAspectRatio;\n }\n\n onEditClosed(msgKey?: string) {\n this.editClosed.emit(msgKey);\n }\n\n onRestart() {\n this.isImgModifiedChange.emit(false);\n }\n\n restartEdit() {\n this.init();\n this.resetConfCropper();\n }\n\n onImgModified() {\n this.isImgModified = true;\n this.isImgModifiedChange.emit(true);\n }\n\n ////// Img cropper methods ////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n /* Cropper output events */\n\n fileChangeEvent(event: any): void {\n this.imageChangedEvent = event;\n }\n\n imageCropped(event: ImageCroppedEvent) {\n this.detectImgCropperChange();\n\n this.currentCroppedImage = event.base64;\n this.currentCroppedImageChange.emit(this.currentCroppedImage);\n }\n\n imageLoaded() {\n this.showCropper = true;\n }\n\n cropperReady() {\n this.isCropperReady = true;\n }\n\n loadImageFailed() {\n this.onEditClosed(this.msgFailLoad);\n }\n\n /* Resize functions */\n\n changeResolutionSize(index: number) {\n this.setActiveItem(this.resolutionConfig, index);\n const config = this.resolutionConfig[index].config;\n this.setCropperProperties(config);\n }\n\n confirmCrop() {\n this.imgRoute = null;\n this.croppedImage = this.currentCroppedImage;\n this.isImgCropped = false;\n this.isImgCroppedInitilized = false;\n this.resetConfCropper();\n this.onImgModified();\n }\n\n resetConfCropper() {\n this.scale = 1;\n this.rotation = 0;\n this.canvasRotation = 0;\n this.transform = {};\n }\n\n private setActiveItem(array:any[], index: number) {\n // Set active-item class for the dropdown\n array.forEach((item, indexItem) => {\n item.active = indexItem === index ? true : false;\n });\n }\n\n private setCropperProperties(config: any) {\n for (const property in config) {\n this.imgCropperConfig[property] = config[property];\n }\n }\n\n private detectImgCropperChange() {\n this.isImgCropped = this.isImgCroppedInitilized;\n this.isImgCroppedInitilized = true;\n }\n\n /* Rotations functions */\n\n rotateLeft() {\n this.canvasRotation--;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n rotateRight() {\n this.canvasRotation++;\n this.flipAfterRotate();\n this.onImgModified();\n }\n\n flipHorizontal() {\n this.transform = {\n ...this.transform,\n flipH: !this.transform.flipH\n };\n this.onImgModified();\n }\n\n flipVertical() {\n this.transform = {\n ...this.transform,\n flipV: !this.transform.flipV\n };\n this.onImgModified();\n }\n\n private flipAfterRotate() {\n const flippedH = this.transform.flipH;\n const flippedV = this.transform.flipV;\n this.transform = {\n ...this.transform,\n flipH: flippedV,\n flipV: flippedH\n };\n }\n\n /* Zoom functions */\n\n zoomOut() {\n this.scale -= this.scale < 0.2? 0 : .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n zoomIn() {\n this.scale += .1;\n this.transform = {\n ...this.transform,\n scale: this.scale\n };\n this.onImgModified();\n }\n\n applyMethod(method: string) {\n this[method](); // call the method contains in zoomConfig or rotationConfig\n }\n}\n","import {Component, OnInit, Input, ViewChild, ElementRef, AfterViewInit, Output, EventEmitter} from '@angular/core';\nimport { ImgPictureDTO, ImgPicturesDTO, ParamsImgManagerDTO } from '../../dto/img-manager.dto';\nimport { ImgManagerService } from '../../services/img-manager.service';\nimport { Subscription, Subject} from 'rxjs';\nimport { debounceTime, take } from 'rxjs/operators';\nimport { ImgEventService } from '../../services/img-event.service';\nimport { ImgSelectionService } from '../../services/img-selection.service';\nimport { UserSettingsService } from '../../services/user-settings.service';\nimport { TableFilters } from '../../services/table/filters-table.service';\nimport { PictureNameUpdate } from '../../dto/picture-name-update.dto';\nimport { easeInOut } from '../../animations/easeInOut/ease-in-out.animation';\nimport { insertRemove } from '../../animations/insertRemove/insert-remove.animation';\nimport { stateDisplayed, tabDisplayed } from '../../dto/export-dtos.api';\nimport { RenamePictureService } from '../../services/rename-picture.service';\nimport { AlertService } from '../../services/alert.service';\n\n@Component({\n selector: 'images-view',\n templateUrl: './images-view.component.html',\n animations: [\n easeInOut,\n insertRemove\n ]\n})\nexport class ImagesViewComponent implements OnInit, AfterViewInit {\n\n @Input() stateDisplayed: stateDisplayed;\n @Input() tabDisplayed: tabDisplayed;\n @Input() fullSize: boolean;\n @Input() maxLengthCardShow: number;\n @Input() listDisplayed = false; // Display format list or mosaic\n @Input() multipleImgMode = false;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n // Data filters\n tableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: '',\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 1\n };\n\n @ViewChild('imgLibContainer') imgLibContainer : ElementRef;\n widthLargeCard: number = 219; // Default value of a card width 199 + margin 20\n widthSmallCard: number = 160; // Default value of a card width 140 + margin 20\n nbMinImgPerLine: number;\n nbMaxImgPerLine: number;\n nbFakeImg: number = 0;\n\n imgFullWidthConfig:any = [\n {\n max: 419,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 499,\n largeImgWidthFactor : 1,\n smallImgWidthFactor : 0.5\n },\n {\n max: 719, // tablet\n largeImgWidthFactor : 0.5,\n smallImgWidthFactor : 0.3333\n },\n {\n max: 1023, // deskop\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.2,\n smallImgWidthFactor : 0.1111\n },\n {\n largeImgWidthFactor : 0.1666,\n smallImgWidthFactor : 0.1\n }\n ];\n\n imgWidthConfig:any = [\n {\n max: 1024,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n },\n {\n max: 1199,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.2\n },\n {\n max: 1299,\n largeImgWidthFactor : 0.3333,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1399,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.1666\n },\n {\n max: 1599,\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.14\n },\n {\n largeImgWidthFactor : 0.25,\n smallImgWidthFactor : 0.125\n }\n ];\n\n imgSubscribe: Subscription;\n imgRemovedEvent: Subscription;\n imgAddedEvent: Subscription;\n imgSelectionChange: Subscription;\n searchQueryChanged: Subject<string> = new Subject<string>();\n filtersChanged: Subject<void> = new Subject<void>();\n\n picturesList: ImgPictureDTO[] = [];\n savePictureList: ImgPictureDTO[] = [];\n imgSelectedList: ImgPictureDTO[];\n searchedValue: string; // Value from the search bar or img added by canva\n nbImgToDelSelected: number = 0;\n disable: boolean = false; // Use to disable action during server request\n isLoading: boolean = true;\n isTotalRetieved: boolean = false;\n delListImgLoader = false;\n initComponent: boolean = true;\n failLoaded: boolean = false;\n displayPexelsResults: boolean = false; // Use when no img find by name, display img from Pexels\n searchText: string;\n confirmImgSup:boolean = false;\n previousSearchValue: string;\n\n // Paginator Params\n pageIndex: number =0;\n length: number = 0;\n pageSize: number = 30; // Default value\n pageSizeOptions: number[] = [25, 50, 100, 250];\n\n // Api Img manager Params\n params:ParamsImgManagerDTO;\n\n private errorGetAllImg = 'ImgManager.ImgLib.errorGetAllImg';\n private errorGetTotalImg = 'ImgManager.ImgLib.errorGetTotalImg';\n private errorGetImg = 'ImgManager.ImgLib.errorGetCanvaImg';\n private msgNoImgFound = 'ImgManager.ImgLib.noImgFound';\n private errorRemoveImg = 'ImgManager.ImgList.errorRemoveImg';\n\n constructor(\n private imgManager: ImgManagerService,\n private imgEventService: ImgEventService,\n private imgSelectionService: ImgSelectionService,\n private alertService: AlertService,\n private userSettingsService: UserSettingsService,\n private renamePictureService: RenamePictureService) { }\n\n ngOnInit(): void {\n if (this.maxLengthCardShow) {\n this.reducePictureListMaxLength();\n }\n this.setEvents();\n this.imgSelectedList = this.imgSelectionService.getImgSelection();\n }\n\n ngAfterViewInit() {\n this.setNbImgToDisplay();\n this._getImgList();\n if (!this.savePictureList) {\n this.savePictureList = this.picturesList;\n }\n }\n\n reducePictureListMaxLength() {\n this.picturesList.splice(0, this.maxLengthCardShow);\n }\n\n getImgList() {\n this.filtersChanged.next();\n }\n\n /**\n * true : go to list display\n * false : go to mosaic display\n * @param activate\n */\n onSwitchFormatDisplayed(activate: boolean) {\n this.listDisplayed = activate;\n this.userSettingsService.setUserDisplayPreference(activate);\n this.imgEventService.emitlistDisplayedChange(activate);\n }\n\n /**\n * Calcul the number of img selected for masse deletion\n */\n onImgSelected() {\n this.setNbImgToDelSelected();\n }\n\n onShowImgUploaded() {\n this.searchText = null;\n this.searchedValue = null;\n this.getImgList();\n }\n\n onRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.renamePictureService.onRenamePicture(pictureRenamed);\n }\n\n removeListImg() {\n if (this.disable) {\n return;\n }\n this.disable = true;\n this.delListImgLoader = true;\n this.confirmImgSup = false;\n\n // Get the id of the img to remove\n // And add deleted property\n const idImgToRemove: string[] = [];\n this.picturesList.forEach( img => {\n if (img.delSelected) {\n img.deleted = true;\n idImgToRemove.push(img.id_file);\n }\n });\n\n this.imgManager.removeMultipleImg(idImgToRemove).subscribe(\n () => {\n this.getImgList();\n this.imgSelectionService.removeImgSelectionByIds(idImgToRemove);\n },\n error => {\n this.getImgList();\n this.alertService.openAlert(this.errorRemoveImg);\n }\n );\n\n\n }\n\n selectImgChosen() {\n if (this.disable) {\n return;\n }\n const picturesListSelected: ImgPictureDTO[] = [];\n this.picturesList.map(img => {\n if(img.delSelected) {\n img.delSelected =false;\n img.selected = true;\n }\n if (img.selected) {\n picturesListSelected.push(img);\n }\n });\n this.setNbImgToDelSelected();\n this.imgSelectionService.setImgSelection(picturesListSelected);\n }\n\n displayConfirmImgSup(){\n if (this.disable) {\n return;\n }\n this.confirmImgSup = true;\n }\n\n cancelSup() {\n this.confirmImgSup = false;\n }\n\n /**\n * Event emit when a img selected in order to delete\n */\n onPicturesListChange() {\n this.setNbImgToDelSelected();\n }\n\n onFiltersChange() {\n this.getImgList();\n }\n\n /**\n * Set default number of img per page to display at the initialisation\n * This number is between 30 and 50\n */\n private setNbImgToDisplay() {\n const containerWidth = this.imgLibContainer.nativeElement.offsetWidth + 30; // + 30px -> left + right margin\n const scrollWidth = window.innerWidth - document.body.offsetWidth;\n\n const [maxImgWidthFactor, minImgWidthFactor] = this.getImgWidthFactors();\n\n const minImgWidth = Math.floor(containerWidth * minImgWidthFactor);\n const maxImgWidth = Math.ceil((containerWidth + scrollWidth ) * maxImgWidthFactor);\n\n this.nbMaxImgPerLine = Math.floor(containerWidth / minImgWidth);\n this.nbMinImgPerLine = Math.floor( (containerWidth + scrollWidth ) / maxImgWidth);\n\n this.pageSize = this.getTotalImgPerPage();\n }\n\n private getImgWidthFactors(): number[] {\n const screenWidth = window.innerWidth;\n let minWidth:number = 0;\n let imgSizesConfig: number[] = [];\n\n const currentImgWidthConfig = this.fullSize ? this.imgFullWidthConfig : this.imgWidthConfig;\n\n for (const widthConfig of currentImgWidthConfig) {\n if (!widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n if (minWidth < screenWidth && screenWidth <= widthConfig.max) {\n imgSizesConfig = [widthConfig.largeImgWidthFactor, widthConfig.smallImgWidthFactor];\n break;\n }\n minWidth = widthConfig.max;\n }\n return imgSizesConfig;\n }\n\n private getTotalImgPerPage(): number {\n let total = this.nbMinImgPerLine;\n\n while (total < 30 || total % this.nbMaxImgPerLine !== 0 || total % this.nbMinImgPerLine !== 0) {\n total += this.nbMinImgPerLine;\n }\n return total;\n }\n\n private setParams() {\n this.params = {\n limit: this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage.toString() : this.pageSize.toString(),\n page: this.tableFilters.currentPage.toString()\n };\n if (this.tableFilters.searchValue) {\n this.params[\"display_name:contains\"] = this.tableFilters.searchValue.toString();\n }\n }\n\n private initVariables(loadingSuccess: boolean) {\n this.nbImgToDelSelected = 0;\n this.disable = false;\n this.isLoading = false;\n this.delListImgLoader = false;\n this.initComponent = false;\n this.displayPexelsResults = false;\n this.failLoaded = !loadingSuccess;\n this.nbFakeImg = 0;\n }\n\n private selectImgSelected () {\n if (!this.imgSelectedList || !this.imgSelectedList.length) {\n return;\n }\n\n const idImgSlectedList: string[] = [];\n\n this.imgSelectedList.forEach(img =>\n idImgSlectedList.push(img.id_file)\n );\n\n this.picturesList.forEach(picture => {\n if (idImgSlectedList.indexOf(picture.id_file) !== -1) {\n picture.selected = true;\n }\n });\n }\n\n private displayPexelsLib () {\n this.displayPexelsResults = true;\n this.alertService.openAlert(this.msgNoImgFound);\n }\n\n /**\n * Set a img list in order to fill properly all the line of images displayed in mosaic.\n * Otherwise, the space-between css will do a bad display\n */\n private calculNbImgFake(nbImgDisplayed: number) {\n const nbImgPerLine = this.stateDisplayed === 'small' || this.tabDisplayed === 'img-upload' ? this.nbMaxImgPerLine : this.nbMinImgPerLine;\n\n if (nbImgDisplayed % nbImgPerLine !== 0) {\n this.nbFakeImg = nbImgPerLine - nbImgDisplayed % nbImgPerLine;\n }\n }\n\n private getImg (id_file: string) {\n this.imgManager.getShopImg(id_file).pipe(take(1)).subscribe(\n (picture: ImgPictureDTO) => {\n\n if (!this.imgAlreadyExist(picture.id_file)) {\n // check the img is not already present\n this.picturesList.unshift(picture);\n this.length += 1;\n }\n },\n error => {\n this.alertService.openAlert(this.errorGetImg);\n }\n );\n }\n\n private imgAlreadyExist (id_file: string): boolean {\n for (const img of this.picturesList) {\n if (img.id_file === id_file) {\n return true;\n }\n }\n return false;\n }\n\n private setNbImgToDelSelected () {\n this.nbImgToDelSelected = this.picturesList.filter(img =>\n img.delSelected).length;\n\n if (!this.nbImgToDelSelected) {\n this.confirmImgSup = false;\n }\n }\n\n private setEvents() {\n // Add a timer to retrieve img when the search bar or the paginator are used\n this.searchQueryChanged\n .pipe(debounceTime(400)) // wait 0.5 sec after the last event before emitting last event\n .subscribe(data => {\n this.getImgList();\n });\n\n this.filtersChanged\n .pipe(debounceTime(800)) // wait 0.8 sec after the last event before emitting last event\n .subscribe(data => {\n this._getImgList();\n });\n\n // Reload img when img is/are removed\n this.imgRemovedEvent = this.imgEventService.getImgRemovedEventListner().subscribe(id_file =>{\n this.getImgList();\n });\n\n // Create img from Canva\n this.imgAddedEvent = this.imgEventService.getImgAddedEventListner().subscribe(id_file =>{\n if (id_file && !this.imgAlreadyExist(id_file)) {\n this.getImg(id_file);\n }\n });\n\n this.imgSelectionChange = this.imgSelectionService.getImgSelectionChange().subscribe(imgSelection =>{\n if (this.listDisplayed) {\n return;\n }\n const idFileList = [];\n imgSelection.map(img => idFileList.push(img.id_file));\n for (const picture of this.picturesList) {\n if (idFileList.indexOf(picture.id_file) === -1) {\n picture.selected = false;\n }\n }\n });\n }\n\n private _getImgList() {\n this.isLoading = true;\n this.displayPexelsResults = false;\n this.setParams();\n\n this.refreshTotalImgList();\n\n this.imgManager.getShopImgList(this.params).pipe(take(1)).subscribe((data: ImgPicturesDTO) => {\n this.initVariables(true);\n const nbImgDisplayed = data.data.length;\n this.calculNbImgFake(nbImgDisplayed);\n this.picturesList = data.data;\n this.renamePictureService.setPicturesList(this.picturesList);\n this.selectImgSelected();\n\n this.length = this.isTotalRetieved ? this.length : data.totalRecords;\n this.tableFilters.totalItems = this.isTotalRetieved ? this.tableFilters.totalItems : data.totalRecords;\n this.tableFilters.itemsPerPage = this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage : this.pageSize;\n\n if (this.maxLengthCardShow) {\n this.picturesList = this.picturesList.splice(0, 8);\n }\n\n // Display Pexels if no result\n if (data.totalRecords === 0) {\n this.displayPexelsLib();\n }\n\n },\n error => {\n this.alertService.openAlert(this.errorGetAllImg);\n this.initVariables(false);\n });\n }\n\n private refreshTotalImgList() {\n const searchValue = this.tableFilters.searchValue;\n\n if (this.isTotalRetieved && searchValue === this.previousSearchValue) {\n // Keep current total result\n return;\n }\n\n this.isTotalRetieved = false;\n\n this.imgManager.getShopTotalImgList(this.params).pipe(take(1)).subscribe(\n\n (data: ImgPicturesDTO) => {\n this.previousSearchValue = searchValue;\n this.isTotalRetieved = true;\n this.length = data.totalRecords;\n this.tableFilters.totalItems = data.totalRecords;\n },\n\n error => {\n //this.alertService.openAlert(this.errorGetTotalImg);\n this.initVariables(false);\n });\n }\n\n switchDisplayWindowMosaic() {\n this.switchDisplayWindow.emit(true);\n }\n\n ngOnDestroy(): void {\n this.searchQueryChanged.unsubscribe();\n this.imgRemovedEvent.unsubscribe();\n this.imgAddedEvent.unsubscribe();\n this.imgSelectionChange.unsubscribe();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { PictureNameUpdate, tabDisplayed } from '../../../dto/export-dtos.api';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'mosaic-view',\n templateUrl: './mosaic-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class MosaicViewComponent extends ImagesActionHandler implements OnInit {\n\n @Input()\n tabDisplayed: tabDisplayed;\n @Input()\n fullSize: boolean;\n @Input()\n nbFakeImg: number = 0;\n @Output()\n switchDisplayWindow: EventEmitter<boolean> = new EventEmitter();\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit(): void {\n }\n\n onSearchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.filtersChange.emit(this.tableFilters);\n }\n\n onCardRenamePicture(pictureRenamed: PictureNameUpdate) {\n this.pictureNameChange.next(pictureRenamed);\n }\n\n switchDisplayWindowCard() {\n this.switchDisplayWindow.emit(true);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { listAnnimation } from '../../../animations/listAnnimation/list.animation';\nimport { AlertService } from '../../../services/alert.service';\nimport { ImgManagerConfigService } from '../../../services/config/external-config.service';\nimport { ImgCDNService } from '../../../services/config/img-cdn.service';\nimport { ImgEventService } from '../../../services/img-event.service';\nimport { ImgManagerService } from '../../../services/img-manager.service';\nimport { ImgSelectionService } from '../../../services/img-selection.service';\nimport { ImagesActionHandler } from '../images-actions-handler';\n\n@Component({\n selector: 'table-view',\n templateUrl: './table-view.component.html',\n animations: [\n listAnnimation\n ]\n})\nexport class TableViewComponent extends ImagesActionHandler implements OnInit {\n dataTableName: string = 'imgagesView'; // Name of your table\n\n constructor(\n imgManager: ImgManagerService,\n imgSelectionService: ImgSelectionService,\n http: HttpClient,\n imgCDNService: ImgCDNService,\n imgEventCardService: ImgEventService,\n alertService: AlertService,\n translateService: TranslateService,\n externalService: ImgManagerConfigService\n ) {\n super(\n imgManager,\n imgSelectionService,\n http,\n imgCDNService,\n imgEventCardService,\n alertService,\n translateService,\n externalService\n );\n }\n\n ngOnInit() {\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { NwbFilterGroup, NwbFilterRoutingBuilder } from '@wizishop/ng-wizi-bulma';\nimport { Subject } from 'rxjs';\nimport { PaginationFilters } from '../../components/shared/pagination/pagination.component';\n\nexport interface TableFilters extends PaginationFilters {\n sort: string;\n order: boolean;\n searchValue: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FiltersTableService {\n filterGroups = new Map<string, NwbFilterGroup>();\n dataTableFilters: TableFilters = {\n sort: undefined,\n order: undefined,\n searchValue: undefined,\n totalItems: 0,\n itemsPerPage: 0,\n currentPage: 0\n };\n\n private sortSubject: Subject<any> = new Subject<any>();\n\n constructor(private filterRoutingBuilder: NwbFilterRoutingBuilder) {}\n\n getTableFilterGroup(dataTableName: string) {\n if (this.filterGroups.has(dataTableName)) {\n return this.filterGroups.get(dataTableName);\n }\n const filterGroup: NwbFilterGroup = this.filterRoutingBuilder.group(this.dataTableFilters, dataTableName);\n this.filterGroups.set(dataTableName, filterGroup);\n return filterGroup;\n }\n\n /**\n * Use to reset the others sorts of the table\n * @param dataTableName\n * @param sortName\n * @param order\n */\n emitSortChange(dataTableName: string, sortName: string, order: boolean) {\n this.sortSubject.next({ dataTableName, sortName, order });\n }\n\n getSortChangeListner() {\n return this.sortSubject.asObservable();\n }\n\n setPaginationFilters(dataTableName: string, totalItems: number, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage,\n currentPage\n });\n }\n\n setInitialPaginationFiltersIfNotExist(dataTableName: string, itemsPerPage: number, currentPage: number) {\n const filterGroup = this.getTableFilterGroup(dataTableName);\n filterGroup.setValues({\n itemsPerPage: filterGroup.get('itemsPerPage') ? parseInt(filterGroup.get('itemsPerPage')) : itemsPerPage,\n currentPage: filterGroup.get('currentPage') ? parseInt(filterGroup.get('currentPage')) : currentPage\n });\n }\n}","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { TableFilters, FiltersTableService } from '../../../services/table/filters-table.service';\n\n@Component({\n selector: 'wz-table',\n templateUrl: './table.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class TableComponent implements OnInit {\n /// Input/Output of table filters ///\n\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n @Input() tableRoutingName: string; // Name of the table\n @Input() placeholder: string = '';\n\n private _filterGroup: NwbFilterGroup;\n\n /// Input/Output of checkbox ///\n\n /** Pass to true to display checkbox in the header table */\n @Input() checkbox = false;\n /** Emit new header checboxValue */\n @Output() toggleAllCheckBox: EventEmitter<boolean> = new EventEmitter();\n\n /// Input to disable section ///\n\n /** Pass to true to hide search input */\n @Input() disableSearch: boolean = false;\n /** Pass to true to hide the pagniator */\n @Input() disablePagniation: boolean = false;\n\n /// Input for loader on table body ///\n @Input() isLoading = false;\n\n /// Private variables ///\n headerCheckBoxId: string;\n private filterGroupChangeSub: Subscription;\n\n constructor(private filtersTableService: FiltersTableService) {}\n\n ngOnInit(): void {\n this.headerCheckBoxId = uuid(); // Create checkbox unique id\n\n /* Handle routing filters */\n if (this.tableRoutingName) {\n this._filterGroup = this.filtersTableService.getTableFilterGroup(this.tableRoutingName);\n\n // Performe initial fetch data\n this._filterGroup.valuesChange$.next([]);\n\n this.setTablesFilters();\n\n // Listen to filters changes with debounced time to limit multiple api calls\n this.filterGroupChangeSub = this._filterGroup.valuesChange$.subscribe(filters => {\n this.setTablesFilters();\n });\n }\n }\n\n onToggleAllCheckBox(event) {\n this.toggleAllCheckBox.emit(event.target.checked);\n }\n\n searchChange(event: string) {\n // Reset table filters\n this.tableFilters.sort = undefined;\n this.tableFilters.order = undefined;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n\n // Reset routing filters\n if (this._filterGroup) {\n this._filterGroup.setValues({\n searchValue: this.tableFilters.searchValue,\n sort: undefined,\n order: undefined,\n currentPage: 1\n });\n }\n }\n\n pageChange() {\n this.tableFiltersChange.emit(this.tableFilters);\n if (this._filterGroup) {\n this._filterGroup.setValues({\n itemsPerPage: this.tableFilters.itemsPerPage,\n currentPage: this.tableFilters.currentPage\n });\n }\n }\n\n /**\n * Set tableFilters from routing data existing in the url\n * */\n private setTablesFilters() {\n this.tableFilters = {\n sort: this._filterGroup.get('sort'),\n order: this._filterGroup.get('order'),\n searchValue: this._filterGroup.get('searchValue'),\n itemsPerPage: this._filterGroup.get('itemsPerPage') ? parseInt(this._filterGroup.get('itemsPerPage')) : 0,\n currentPage: this._filterGroup.get('currentPage') ? parseInt(this._filterGroup.get('currentPage')) : 0,\n totalItems: this.tableFilters.totalItems\n };\n this.tableFiltersChange.emit(this.tableFilters);\n }\n\n ngDestroy() {\n if (this.filterGroupChangeSub) {\n this.filterGroupChangeSub.unsubscribe();\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-input-search',\n templateUrl: './input-search.component.html',\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: InputSearchComponent, multi: true }]\n})\nexport class InputSearchComponent implements ControlValueAccessor {\n @Input()\n placeholder = '';\n @Input()\n smallPadding = false;\n @Input()\n id;\n private innerValue: any = '';\n @Output() changeDebounced = new EventEmitter<any>(); // debounced\n\n private onTouchedCallback: () => void = () => {};\n private onChangeCallback: (_: any) => void = () => {};\n\n get value(): any {\n return this.innerValue;\n }\n\n set value(v: any) {\n if (v !== this.innerValue) {\n this.innerValue = v;\n this.onChangeCallback(v);\n }\n }\n\n writeValue(value: any) {\n if (value !== this.innerValue) {\n this.innerValue = value;\n }\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n public handleDebouncedKeyUp(event): void {\n this.changeDebounced.emit(event.target.value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'IsLastPage'\n})\nexport class PagniationIsLastPage implements PipeTransform {\n /**\n * Return true, if the current page is the last page. Otherwise, return false.\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): boolean {\n if (!(currentPage >= 0 && totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('currentPage or totalItems or itemsPerPage is/are missing in PagniationIsLastPage pipe.');\n }\n return currentPage === Math.ceil(totalItems / itemsPerPage);\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PagniationIsLastPage } from '../../../pipes/pagination/total-pages/is-last-page.pipe';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-pagination',\n templateUrl: './pagination.component.html'\n})\nexport class PaginationComponent {\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Output() pageChange: EventEmitter<PaginationFilters> = new EventEmitter();\n\n constructor() {}\n\n decrementPage() {\n if (this.pagination.currentPage <= 1) {\n return;\n }\n this.pagination.currentPage--;\n this.pageChange.emit(this.pagination);\n }\n\n incrementPage() {\n const isLastPage = new PagniationIsLastPage().transform(\n this.pagination.currentPage,\n this.pagination.totalItems,\n this.pagination.itemsPerPage\n );\n if (isLastPage) {\n return;\n }\n this.pagination.currentPage++;\n this.pageChange.emit(this.pagination);\n }\n\n onGotoPageChange(pageNumber) {\n this.pagination.currentPage = parseInt(pageNumber);\n this.pageChange.emit(this.pagination);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ArrayTotalPages'\n})\nexport class PagniationArrayTotalPages implements PipeTransform {\n /**\n * Return an incremental array corresponding with the number page\n * [ 1, 2, 3 ..., last page number ]\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n const arrayLength: number = Math.ceil(totalItems / itemsPerPage);\n return Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => x + 1);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n name: 'customPagniationText'\n})\nexport class PagniationText implements PipeTransform {\n constructor(private translateService: TranslateService) {}\n\n /**\n * Update pagination text if at least one entrie change\n * @param currentPage\n * @param totalItems\n * @param itemsPerPage\n */\n transform(currentPage: number, totalItems: number, itemsPerPage: number): any {\n let currentItemsLow = 0,\n currentItemsHigh = 0;\n\n if (totalItems) {\n currentItemsLow = (currentPage - 1) * itemsPerPage + 1;\n currentItemsHigh = currentPage * itemsPerPage;\n }\n\n if (currentItemsHigh > totalItems) {\n currentItemsHigh = totalItems;\n }\n\n return this.translateService.instant('PaginationComponent.on', { low: currentItemsLow, high: currentItemsHigh, total: totalItems });\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'wz-checkbox',\n templateUrl: './checkbox.component.html',\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: CheckboxComponent, multi: true }]\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n @Input()\n label = '';\n @Input()\n value: any;\n @Input()\n type: string;\n @Input()\n alone = false;\n @Input()\n checked = false;\n @Input()\n id = '';\n @Input()\n name: string;\n disabled = false;\n constructor() {}\n private _onChange: Function;\n private _onTouched: Function;\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n writeValue(obj: any): void {\n this.value = obj;\n }\n\n onChange(value) {\n if (this._onChange) {\n this._onChange(value);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ComponentFactoryResolver,\n EventEmitter,\n Inject,\n Output,\n Renderer2,\n Directive,\n ElementRef,\n Input,\n ComponentRef,\n ApplicationRef,\n EmbeddedViewRef,\n Injector,\n Type\n} from '@angular/core';\n\nimport { v4 as uuid } from 'uuid';\nimport { CheckboxComponent } from '../../components/shared/checkbox/checkbox.component';\n\n@Directive({\n selector: '[checkBoxRow]'\n})\nexport class CheckBoxRow {\n @Input('checkBoxId') checkBoxId: string | number;\n @Input('checkBoxName') checkBoxName: string;\n\n @Input('checkBoxValue') set checkBoxValue(value: boolean) {\n this._value = value;\n if (this.checkboxComponentRef) {\n this.setCheckBoxValue();\n }\n }\n _value: boolean;\n get checkBoxValue(): boolean {\n return this._value;\n }\n\n @Output() checkBoxValueChange: EventEmitter<boolean> = new EventEmitter();\n\n private checkboxComponentRef: ComponentRef<CheckboxComponent>;\n private htmlContainer: HtmlContainer;\n\n constructor(\n private currentRow: ElementRef,\n private appRef: ApplicationRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private resolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n ngOnInit() {\n this.createCheckBoxComponent();\n this.handleChecboxInputs();\n this.handleCheckboxOutputs();\n }\n\n createCheckBoxComponent() {\n // Create the container\n const checkBoxContainer = document.createElement('div');\n checkBoxContainer.className = 'wz-table__body__line__cell wz-table__body__line__cell--checkbox';\n\n // Insert divCheckBox in the DOM as the first child of the row\n this.renderer.insertBefore(this.currentRow.nativeElement, checkBoxContainer, this.currentRow.nativeElement.firstChild);\n\n // Insert the CheckBoxComponent inside the container (DOM and Angular DOM)\n this.htmlContainer = new HtmlContainer(checkBoxContainer, this.appRef, this.resolver, this.injector);\n this.checkboxComponentRef = this.htmlContainer.attach(CheckboxComponent);\n }\n\n private handleChecboxInputs() {\n this.checkboxComponentRef.instance.id = this.checkBoxId ? this.checkBoxId : uuid();\n this.checkboxComponentRef.instance.name = this.checkBoxName ? this.checkBoxName : undefined;\n this.checkboxComponentRef.instance.alone = true;\n this.setCheckBoxValue();\n }\n\n private setCheckBoxValue() {\n this.checkboxComponentRef.instance.value = this.checkBoxValue;\n }\n\n private handleCheckboxOutputs() {\n // Detect checkbox changes\n this.checkboxComponentRef.instance.registerOnChange(() => {\n this._toggleCheckbox();\n });\n }\n\n private _toggleCheckbox() {\n this.checkBoxValue = !this.checkBoxValue;\n this.checkBoxValueChange.emit(this.checkBoxValue);\n }\n\n ngOnDestroy() {\n this.htmlContainer.dispose();\n }\n}\n\nexport class HtmlContainer {\n private attached: boolean = false;\n\n private disposeFn: () => void;\n\n constructor(\n private hostElement: Element,\n private appRef: ApplicationRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n attach(component: Type<any>): ComponentRef<any> {\n if (this.attached) {\n throw new Error('component has already been attached');\n }\n\n this.attached = true;\n const childComponentFactory = this.componentFactoryResolver.resolveComponentFactory(component);\n\n let componentRef = childComponentFactory.create(this.injector);\n\n this.appRef.attachView(componentRef.hostView);\n this.disposeFn = () => {\n this.appRef.detachView(componentRef.hostView);\n componentRef.destroy();\n };\n\n this.hostElement.appendChild((componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0]);\n\n return componentRef;\n }\n\n dispose() {\n if (this.attached) {\n this.disposeFn();\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[tableColumn]'\n})\nexport class TableColumn {\n @Input('columnSize') columnSize: string; // Optional.\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__body__line__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { EventEmitter, Inject, Output } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef, Input } from '@angular/core';\nimport { NwbFilterGroup } from '@wizishop/ng-wizi-bulma';\nimport { Subscription } from 'rxjs';\nimport { FiltersTableService, TableFilters } from '../../services/table/filters-table.service';\n\n@Directive({\n // The selector has the same name as the headerCell selector in table.component.html\n selector: '[headerCell]'\n})\nexport class TableColumnHeader {\n @Input('headerName') // Optional.\n set headerName(value: string) {\n this._headerName = value;\n this.setHeaderName();\n }\n _headerName: string = '';\n get headerName(): string {\n return this._headerName;\n }\n @Input('columnSize') columnSize: string; // Optional.\n @Input('filterRouting') filterRouting: boolean = false; // Optional. Set to true to use Filter Routing.\n @Input('tableName') tableName: string; // Optional, but mandatory to handle sorting\n @Input('sortName') sortName: string; // Optional, but mandatory to handle sorting\n @Input('centerCell') centerCell: string; // Optional. left|center|right\n @Output() onSortChange: EventEmitter<boolean> = new EventEmitter(); // Emit the sort value (true, false, undefuned) of the current sort icon when clicking\n @Input() tableFilters: TableFilters;\n @Output() tableFiltersChange: EventEmitter<TableFilters> = new EventEmitter();\n\n private centerCellValue: string[] = ['left', 'center', 'right'];\n\n private contentHeader: HTMLAnchorElement;\n private filterGroup: NwbFilterGroup;\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private currentCell: ElementRef,\n private renderer: Renderer2,\n @Inject(DOCUMENT) private document,\n private filtersTableService: FiltersTableService\n ) {}\n\n ngOnInit() {\n if (this.tableName && this.sortName) {\n if (this.filterRouting) {\n this.handleSortRouting();\n } else {\n this.handleSortBasic();\n }\n }\n }\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n this.renderHeaderColumn();\n }\n\n handleSortRouting() {\n this.filterGroup = this.filtersTableService.getTableFilterGroup(this.tableName);\n\n const filterGroupChangeSub = this.filterGroup.valuesChange$.subscribe(filters => {\n const filterSort = filters.filter(filter => filter.key === 'sort')[0];\n if (this.sortName !== filterSort.value) {\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(filterGroupChangeSub);\n }\n\n handleSortBasic() {\n const sortChangeSub = this.filtersTableService.getSortChangeListner().subscribe(sort => {\n if (this.tableName === sort.dataTableName && this.sortName !== sort.sortName) {\n // Reset the current sort icon\n this.resetSortIcon();\n }\n });\n this.subscriptions.push(sortChangeSub);\n }\n\n resetSortIcon() {\n // Replace current icon with default icon\n this.contentHeader.className = this.contentHeader.className.replace(this.getCurrentSortIcon(), 'idle');\n }\n\n applyCustomStylesOnCell() {\n this.currentCell.nativeElement.style.flexGrow = typeof this.columnSize !== 'undefined' ? this.columnSize : '1';\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__head__cell');\n\n if (this.centerCell) {\n if (this.centerCellValue.indexOf(this.centerCell) === -1) {\n throw 'Error : The centerCell directive has no matched value. The value must be one of the following : left, center, right.';\n }\n\n let className = 'wz-table__head__cell--center' + '--' + this.centerCell;\n this.renderer.addClass(this.currentCell.nativeElement, className);\n }\n }\n\n renderHeaderColumn() {\n this.createHeaderContent();\n this.renderer.appendChild(this.currentCell.nativeElement, this.contentHeader);\n }\n\n createHeaderContent() {\n this.contentHeader = document.createElement('a');\n this.contentHeader.className = 'wz-table__head__cell__search';\n this.setHeaderName();\n if (this.tableName && this.sortName) {\n this.handleSort();\n }\n }\n\n private setHeaderName() {\n if (!this.contentHeader) {\n return;\n }\n this.contentHeader.innerHTML = this.headerName;\n }\n\n handleSort() {\n // Set icon in the header column cell\n this.contentHeader.className += ' wz-table__head__cell__search--' + this.getInitialSortIcon();\n\n // On click on the content header, change the icon and emit event\n this.renderer.listen(this.contentHeader, 'click', () => {\n const currentIcon = this.getCurrentSortIcon();\n let newIcon: string;\n let newSort: string, newOrder: boolean;\n\n switch (currentIcon) {\n case 'idle':\n newIcon = 'up';\n newSort = this.sortName;\n newOrder = true;\n break;\n\n case 'up':\n newIcon = 'down';\n newSort = this.sortName;\n newOrder = false;\n break;\n\n case 'down':\n newIcon = 'idle';\n break;\n\n default:\n newIcon = 'idle';\n break;\n }\n // Replace the icon\n this.contentHeader.className = this.contentHeader.className.replace(currentIcon, newIcon);\n\n this.emitEvents(newSort, newOrder);\n });\n }\n\n getInitialSortIcon() {\n if (!this.filterRouting) {\n return 'idle';\n }\n // Get Initial Sort Icon for Routing Filter\n let initialSortIcon = 'idle';\n if (this.filterGroup.get('sort') === this.sortName) {\n initialSortIcon = this.filterGroup.get('order') == 'true' ? 'up' : 'down';\n }\n return initialSortIcon;\n }\n\n getCurrentSortIcon() {\n const regexp = /wz-table__head__cell__search--(?<icon>\\w+)/;\n const { groups } = regexp.exec(this.contentHeader.className);\n return groups.icon;\n }\n\n emitEvents(newSort, newOrder) {\n if (this.filterRouting) {\n // Will send the filter routing value has changes event\n this.filterGroup.setValues({\n sort: newSort,\n order: newOrder,\n currentPage: 1\n });\n } else {\n // Send the event sort change\n this.filtersTableService.emitSortChange(this.tableName, this.sortName, newOrder);\n }\n if (this.tableFilters) {\n this.tableFilters.sort = this.sortName;\n this.tableFilters.order = newOrder;\n this.tableFilters.currentPage = 1;\n this.tableFiltersChange.emit(this.tableFilters);\n }\n this.onSortChange.emit(newOrder);\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(subscription => {\n subscription.unsubscribe();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport { Renderer2 } from '@angular/core';\nimport { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n // The selector has the same name as the tableRaw selector in table.component.html\n selector: '[tableRow]'\n})\nexport class TableRow {\n constructor(private currentCell: ElementRef, private renderer: Renderer2, @Inject(DOCUMENT) private document) {}\n\n ngAfterViewInit() {\n this.applyCustomStylesOnCell();\n }\n\n applyCustomStylesOnCell() {\n this.renderer.addClass(this.currentCell.nativeElement, 'wz-table__body__line');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ImgCDNService } from '../../services/config/img-cdn.service';\n\n@Pipe({\n name: 'imgSrc'\n})\nexport class ImageSrcPipe implements PipeTransform {\n\n constructor(private imgCDNService: ImgCDNService) { }\n\n transform(pictureName: string, size: string): string {\n if(!size) {\n throw \"The size is undefined in ImageSrcPipe.\";\n }\n\n const route: string = this.imgCDNService.getUrlImg(size);\n\n if (!route) {\n throw \"The expected size is not defined in ImageSrcPipe.\";\n }\n\n return route + pictureName;\n }\n}\n","import { Directive, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\n\n@Directive({\n selector: 'AbstractDebounceDirective'\n})\nexport class AbstractDebounceDirective implements OnDestroy {\n @Input()\n public debounceTime: number;\n\n @Output()\n public onEventChange: EventEmitter<any>;\n\n protected emitEvent$: Subject<any>;\n protected subscription$: Subject<void>;\n\n constructor() {\n this.debounceTime = 500;\n this.onEventChange = new EventEmitter<any>();\n this.emitEvent$ = new Subject<any>();\n this.subscription$ = new Subject<void>();\n }\n\n ngOnInit(): void {\n this.emitEvent$\n .pipe(\n takeUntil(this.subscription$),\n debounceTime(this.debounceTime),\n distinctUntilChanged(),\n tap(value => this.emitChange(value))\n )\n .subscribe();\n }\n\n public emitChange(value: any): void {\n this.onEventChange.emit(value);\n }\n\n ngOnDestroy(): void {\n this.subscription$.next();\n this.subscription$.complete();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { AbstractDebounceDirective } from './abstract-debounce.directive';\n@Directive({\n selector: 'input[debounceKeyUp]'\n})\nexport class DebounceKeyupDirective extends AbstractDebounceDirective {\n constructor() {\n super();\n }\n\n @HostListener('keyup', ['$event'])\n public onKeyUp(event: any): void {\n event.preventDefault();\n this.emitEvent$.next(event);\n }\n}\n","import { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'wz-loader',\n templateUrl: './loader.component.html',\n encapsulation: ViewEncapsulation.None\n})\nexport class LoaderComponent {\n @Input()\n text: string;\n @Input()\n small = false;\n @Input()\n position: string;\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'wz-alert',\n styleUrls: ['./alert.component.scss'],\n templateUrl: './alert.component.html'\n})\nexport class AlertComponent implements OnInit {\n @Input() icon = true;\n @Input() warning = false;\n @Input() success = false;\n @Input() iconClass = 'fas fa-info';\n constructor() {}\n ngOnInit(): void {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberToArray'\n})\nexport class NumberToArray implements PipeTransform {\n\n transform(number: number): any[] {\n return Array.from('x'.repeat(number));\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface PaginationFilters {\n totalItems: number;\n itemsPerPage: number;\n currentPage: number;\n}\n\n@Component({\n selector: 'wz-page-selector',\n templateUrl: './page-selector.component.html'\n})\nexport class PageSelectorComponent {\n\n @Input() set pagination(pagination: PaginationFilters) {\n this._pagination = pagination;\n }\n get pagination(): PaginationFilters {\n return this._pagination;\n }\n private _pagination: PaginationFilters;\n\n @Input() set totalItems(totalItems: number) {\n this.numberOfPage = Math.ceil(totalItems / this.pagination.itemsPerPage);\n this.largeNumberOfPage = this.numberOfPage > 30;\n }\n get totalItems(): number {\n return this._totalItems;\n }\n private _totalItems: number;\n openAbsoluteSelect:boolean = false;\n\n largeNumberOfPage: boolean = false;\n numberOfPage: number = 0;\n\n @Output() pageChange: EventEmitter<number> = new EventEmitter();\n\n constructor() {}\n\n onGotoPageChange(event, directValue) {\n if (directValue) {\n this.pageChange.emit(event);\n this.openAbsoluteSelect = false;\n } else {\n this.pageChange.emit(parseInt(event.target.value));\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'LargeNumberOfPage'\n})\nexport class LargeNumberOfPagePipe implements PipeTransform {\n /**\n * Return an incremental array\n * Display 30 pages, from -15 to +15 of the current page\n * @param totalItems\n * @param itemsPerPage\n */\n transform(totalItems: number, itemsPerPage: number, currentPage: number): number[] {\n if (!(totalItems >= 0 && itemsPerPage >= 0)) {\n throw new Error('totalItems or itemsPerPage missing in ArrayTotalPages pipe.');\n }\n\n let arrayLength: number = 32;\n\n const startAtPage = currentPage <= 15 ? 0: currentPage - 15;\n const totalPage = Math.ceil(totalItems / itemsPerPage);\n\n\n\n const arrayWithPageNumber = Array.apply(null, { length: arrayLength })\n .map(Number.call, Number)\n .map((x: number) => {\n\n const pageIndex:any = {\n display: startAtPage + x + 1,\n value: startAtPage + x + 1\n };\n\n if (x === arrayLength - 2) {\n pageIndex.display = '...';\n }\n if (x === arrayLength - 1) {\n pageIndex.display = totalPage;\n pageIndex.value = totalPage;\n }\n\n return pageIndex;\n });\n\n\n if (startAtPage) {\n arrayWithPageNumber.unshift(\n {\n display: 1,\n value: 1\n },\n {\n display: \"...\",\n value: 2\n }\n );\n }\n\n return arrayWithPageNumber;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { WzImgManagerComponent } from './wz-img-manager.component';\nimport { ImgUploadComponent } from './components/img-upload/img-upload.component';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ImgTabsComponent } from './components/img-tabs/img-tabs.component';\nimport { CommonModule } from '@angular/common';\nimport { DragDropDirective } from './directives/drag-drop.directive';\nimport { PexelLibComponent } from './components/pexels-lib/pexels-lib.component';\nimport { FormsModule } from '@angular/forms';\nimport { ImgCardComponent } from './components/images-view/mosaic-view/img-card/img-card.component';\nimport { NgScrollbarModule } from 'ngx-scrollbar';\nimport { NgScrollbarReachedModule } from 'ngx-scrollbar/reached-event';\nimport { NwbAllModule } from '@wizishop/ng-wizi-bulma';\nimport { UploadListComponent } from './components/upload-list/upload-list.component';\nimport { ImgEditorComponent } from './components/img-editor/img-editor.component';\nimport { ImageCropperModule } from 'ngx-image-cropper';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CanvaBtnComponent } from './components/canva-btn/canva-btn.component';\nimport { ImgSelectionComponent } from './components/img-selection/img-selection.component';;\nimport { LoadingDirective } from './directives/loading.directive';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AutoHideDirective } from './directives/auto-hide.directive';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CopyClipboardDirective } from './directives/copy-to-clipboard.directive';\nimport { DropdownComponent } from './components/shared/dropdown/dropdown.component';\nimport { EditorInfoSectionComponent } from './components/img-editor/info-section/info-section.component';\nimport { CropperComponent } from './components/img-editor/cropper/cropper.component';\nimport { ImagesViewComponent } from './components/images-view/images-view.component';\nimport { MosaicViewComponent } from './components/images-view/mosaic-view/mosaic-view.component';\nimport { TableViewComponent } from './components/images-view/table-view/table-view.component';\nimport { TableComponent } from './components/shared/table/table.component';\nimport { InputSearchComponent } from './components/shared/input-search/input-search.component';\nimport { PaginationComponent } from './components/shared/pagination/pagination.component';\nimport { PagniationArrayTotalPages } from './pipes/pagination/array-total-pages/array-pages.pipe';\nimport { PagniationText } from './pipes/pagination/text/custom-text.pipe';\nimport { PagniationIsLastPage } from './pipes/pagination/total-pages/is-last-page.pipe';\nimport { CheckBoxRow } from './directives/table/checkBoxRow.directive';\nimport { TableColumn } from './directives/table/column.directive';\nimport { TableColumnHeader } from './directives/table/columnHeader.directive';\nimport { TableRow } from './directives/table/raw.directive';\nimport { CheckboxComponent } from './components/shared/checkbox/checkbox.component';\nimport { ImageSrcPipe } from './pipes/images/img-src.pipe';\nimport { AbstractDebounceDirective } from './directives/abstract-debounce/abstract-debounce.directive';\nimport { DebounceKeyupDirective } from './directives/abstract-debounce/debounce-keyup.directive';\nimport { LoaderComponent } from './components/loader/loader.component';\nimport { AlertComponent } from './components/shared/alert/alert.component';\nimport { NumberToArray } from './pipes/number-to-array.pipe';\nimport { PageSelectorComponent } from './components/shared/pagination/page-selector/page-selector.component';\nimport { LargeNumberOfPagePipe } from './pipes/pagination/large-number-of-page/large-number-of-page.pipe';\n\nconst components = [\n WzImgManagerComponent,\n ImgTabsComponent,\n ImgUploadComponent,\n PexelLibComponent,\n ImgCardComponent,\n UploadListComponent,\n ImgEditorComponent,\n EditorInfoSectionComponent,\n CanvaBtnComponent,\n ImgSelectionComponent,\n LoaderComponent,\n DropdownComponent,\n CropperComponent,\n ImagesViewComponent,\n MosaicViewComponent,\n TableViewComponent,\n TableComponent,\n InputSearchComponent,\n PaginationComponent,\n CheckboxComponent,\n AlertComponent,\n PageSelectorComponent,\n];\n\nconst directives = [\n DragDropDirective,\n LoadingDirective,\n AutoHideDirective,\n CopyClipboardDirective,\n TableColumn,\n CheckBoxRow,\n TableColumnHeader,\n TableRow,\n AbstractDebounceDirective,\n DebounceKeyupDirective,\n];\n\nconst pipes = [\n PagniationArrayTotalPages,\n PagniationIsLastPage,\n PagniationText,\n ImageSrcPipe,\n NumberToArray,\n LargeNumberOfPagePipe\n];\n\n@NgModule({\n declarations: [\n ...components,\n ...directives,\n ...pipes\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n NgScrollbarModule,\n NgScrollbarReachedModule,\n NwbAllModule,\n ImageCropperModule,\n CdkTableModule,\n DragDropModule,\n TranslateModule],\n providers: [],\n exports: [\n WzImgManagerComponent]\n})\nexport class WzImgManagerModule { }\n","import { CanvaCreateDesign } from \"./canva-create-design.dto\";\n\nexport class CanvaButtonApi {\n createDesign: (\n opts: {\n design: CanvaCreateDesign,\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n ) => void;\n editDesign: (opts: {\n opts: {\n design: {\n id: any\n },\n editor?: {\n publishLabel: string,\n fileType: string\n }\n onDesignOpen?: (\n opts: { designId: string, designTitle: string }\n ) => void,\n onDesignPublish?: (\n opts: { exportUrl: string, designId: string, designTitle: string }\n ) => void,\n onDesignClose?: () => void\n }\n }) => void;\n};","export class ImgApiDto {\n shop_token: string;\n image_manager_route = '';\n pexels_token: string;\n pexels_route = '';\n shop_category: string;\n canva_token: string;\n canva_url = '';\n assets_route: string = 'assets/img-manager/';\n}\n","export class ImgCDNConfigDTO {\n url_raw_image = '';\n url_100_image = '';\n url_200_image = '';\n url_400_image = '';\n url_800_image = '';\n}"]}
|