@wizishop/img-manager 0.2.49 → 0.2.53
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 +4 -15
- package/bundles/wizishop-img-manager.umd.js.map +1 -1
- package/bundles/wizishop-img-manager.umd.min.js +1 -1
- package/bundles/wizishop-img-manager.umd.min.js.map +1 -1
- package/esm2015/lib/components/canva-btn/canva-btn.component.js +2 -13
- package/esm2015/lib/components/images-view/images-view.component.js +2 -2
- package/esm2015/lib/components/img-selection/img-selection.component.js +2 -2
- package/esm2015/lib/services/user-settings.service.js +2 -2
- package/esm2015/lib/wz-img-manager.component.js +1 -2
- package/esm5/lib/components/canva-btn/canva-btn.component.js +2 -13
- package/esm5/lib/components/images-view/images-view.component.js +2 -2
- package/esm5/lib/components/img-selection/img-selection.component.js +2 -2
- package/esm5/lib/services/user-settings.service.js +2 -2
- package/esm5/lib/wz-img-manager.component.js +1 -2
- package/fesm2015/wizishop-img-manager.js +4 -15
- package/fesm2015/wizishop-img-manager.js.map +1 -1
- package/fesm5/wizishop-img-manager.js +4 -15
- package/fesm5/wizishop-img-manager.js.map +1 -1
- package/lib/components/canva-btn/canva-btn.component.d.ts +1 -4
- package/package.json +1 -1
- package/wizishop-img-manager-0.2.53.tgz +0 -0
- package/wizishop-img-manager.metadata.json +1 -1
- package/wz-img-manager.scss +29 -4
- package/wizishop-img-manager-0.2.49.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/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","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","console","log","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","imgExpectedByWiziblock","onOpenCanva","subCanvaApi","addOverflowBody","createDesign","dimensions","units","publishLabel","design","onDesignPublish","_a","exportUrl","designTitle","designPublished","onDesignClose","removeOverflowBody","subUploadImg","addClass","removeClass","Renderer2","ImgSelectionComponent","removingAll","cancellingAll","importingAll","dragStart","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","delListImgLoader","failLoaded","confirmImgSup","pageIndex","pageSize","pageSizeOptions","errorGetAllImg","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","imgSubscribe","imgAlreadyExist","unshift","imgRemovedEvent","imgAddedEvent","totalRecords","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","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","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 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' ? true : false;\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 console.log(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 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 // Expected img size (wanted by wiziblock)\n imgExpectedByWiziblock: boolean;\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 imgSelectionService: ImgSelectionService,\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 this.imgExpectedByWiziblock = true;\n } else {\n this.expectedWidth = undefined;\n this.expectedHeight = undefined;\n this.imgExpectedByWiziblock = false;\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 // Close the img manager and display the img create in the wiziblock\n if (this.imgExpectedByWiziblock) {\n this.imgSelectionService.addImgSelected(img);\n return;\n }\n this.wzImgEventService.emitImgAdded(img.id_file);\n\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\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 transition(':leave', [\n animate('0.5s ease-in-out', style({ opacity: 0 }))\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 } 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 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\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 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.imgSubscribe = this.imgManager.getShopImg(id_file).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 this.imgSubscribe = this.imgManager.getShopImgList(this.params).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 this.length = data.totalRecords;\n this.tableFilters.totalItems = data.totalRecords;\n this.tableFilters.itemsPerPage = this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage : this.pageSize;\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 error => {\n this.alertService.openAlert(this.errorGetAllImg);\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(event) {\n this.pagination.currentPage = parseInt(event.target.value);\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 { 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';\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];\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];\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/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","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","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","delListImgLoader","failLoaded","confirmImgSup","pageIndex","pageSize","pageSizeOptions","errorGetAllImg","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","imgSubscribe","imgAlreadyExist","unshift","imgRemovedEvent","imgAddedEvent","totalRecords","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","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","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 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 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\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 transition(':leave', [\n animate('0.5s ease-in-out', style({ opacity: 0 }))\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 } 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 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\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 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.imgSubscribe = this.imgManager.getShopImg(id_file).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 this.imgSubscribe = this.imgManager.getShopImgList(this.params).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 this.length = data.totalRecords;\n this.tableFilters.totalItems = data.totalRecords;\n this.tableFilters.itemsPerPage = this.tableFilters.itemsPerPage ? this.tableFilters.itemsPerPage : this.pageSize;\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 error => {\n this.alertService.openAlert(this.errorGetAllImg);\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(event) {\n this.pagination.currentPage = parseInt(event.target.value);\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 { 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';\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];\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];\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}"]}
|