{"version":3,"sources":["webpack:///src/app/directives/bg-slider.directive.ts","webpack:///src/app/modules/shared/components/feedback-carousel/feedback-carousel.component.html","webpack:///src/app/modules/shared/components/feedback-carousel/feedback-carousel.component.ts","webpack:///src/app/modules/shared/components/feedback-carousel/feedback-carousel.module.ts"],"sourcesContent":["import {Directive, ElementRef} from '@angular/core';\n\n@Directive({\n selector: '[appBgSlider]',\n})\nexport class BgSliderDirective {\n\n slides = [\n 'assets/bg1.jpg',\n 'assets/bg2.jpg',\n ];\n\n constructor(el: ElementRef) {\n const index = this.getRandom(0, this.slides.length);\n\n el.nativeElement.style.backgroundImage = `url(${this.slides[index]})`;\n }\n\n getRandom(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n }\n\n}\n","
\n
\n
\n
\n \n
\n\n
\n
\n \n
\n \n
\n
\n
\n
\n\n
\n \n
\n
\n
\n
\n
    \n
  • \n \n
  • \n
\n
\n
\n
\n","import {\n AfterViewInit,\n Component, ComponentRef,\n ElementRef,\n EventEmitter,\n HostListener, Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit, Output, PLATFORM_ID,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport {animate, AnimationBuilder, AnimationFactory, AnimationPlayer, style} from '@angular/animations';\nimport {Recent} from '../../../../entity/recent';\nimport {plainToClass} from 'class-transformer';\nimport {NotifyComponent} from '../notify/notify.component';\nimport {BsModalRef, BsModalService} from 'ngx-bootstrap/modal';\nimport {BackRouter} from '../../services/back-router';\nimport {LoadableComponent} from 'ngx-loadable';\nimport {ReaderFeedbackCardComponent} from '../../primary-components/reader-feedback-card/reader-feedback-card.component';\nimport {UtilService} from '../../../../services/util.service';\nimport {WINDOW} from '../../../../providers/window.provider';\nimport {isPlatformBrowser} from '@angular/common';\nimport * as Sentry from '@sentry/angular';\n@Component({\n selector: 'shared-feedback-carousel',\n templateUrl: './feedback-carousel.component.html',\n styleUrls: ['./feedback-carousel.component.scss'],\n})\nexport class FeedbackCarouselComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n @ViewChild('container', {static: false})\n container: ElementRef;\n @ViewChild('line', {static: false})\n line: ElementRef;\n initialWidth;\n slideActiveNumber = 1;\n timing = '400ms ease-in';\n autoSlide;\n lock = false;\n bsModalRef: BsModalRef;\n requestId;\n private time = 0;\n @ViewChildren('slide', {read: ElementRef})\n private slides: QueryList;\n private player: AnimationPlayer;\n\n // @ViewChild('readerFeebackCardComponent') readerFeebackCardComponent: LoadableComponent;\n // showReaderFeebackCard = false;\n private isBrowser: boolean = isPlatformBrowser(this.platformId);\n\n @ViewChildren('carouselFeedBack') carouselFeedBackList: QueryList;\n\n @Output() finishRender = new EventEmitter();\n\n\n constructor(\n private modalService: BsModalService,\n private builder: AnimationBuilder,\n private br: BackRouter,\n private utilService: UtilService,\n @Inject(WINDOW) private window: Window,\n @Inject(PLATFORM_ID) private platformId: Object\n ) {\n }\n\n @Input()\n data: Recent[] = [];\n\n ngOnInit() {\n this.initialize();\n }\n\n\n ngOnChanges(changes: SimpleChanges) {\n this.initialize();\n\n }\n\n initialize() {\n const self = this;\n if (this.data.length > 0) {\n // clone objects\n this.data.push(plainToClass(Recent, this.data[0]));\n this.data.unshift(plainToClass(Recent, this.data[this.data.length - 2]));\n\n this.data = this.data.map((item, index) => {\n item.num = index;\n return item;\n });\n self.utilService.setTimeout(() => {\n self.prepare();\n });\n this.setInterval();\n }\n\n }\n\n // @HostListener('window:resize', ['$event'])\n // onResize() {\n // this.prepare();\n // }\n //\n // @HostListener('mouseover', ['$event'])\n // onHover() {\n // if (this.isBrowser) {\n // cancelAnimationFrame(this.requestId);\n // this.requestId = undefined;\n // }\n //\n // }\n //\n // @HostListener('mouseout', ['$event'])\n // onMouseOut() {\n // this.setInterval();\n // }\n //\n setInterval() {\n const self = this;\n const loop: any = (highResTimestamp) => {\n self.time++;\n if (self.time === 400) {\n self.time = 0;\n self.next();\n }\n\n // start();\n };\n // const start = () => {\n // if (!self.requestId) {\n // if (self.isBrowser) {\n // cancelAnimationFrame(this.requestId);\n // self.requestId = requestAnimationFrame(loop);\n // }\n // }\n // };\n // if (!self.requestId) {\n // cancelAnimationFrame(this.requestId);\n requestAnimationFrame(loop);\n // }\n\n // start();\n }\n\n\n\n prepare() {\n try {\n this.initialWidth = this.container.nativeElement.getBoundingClientRect().width;\n this.line.nativeElement.style.width = this.initialWidth * this.data.length + 'px';\n this.line.nativeElement.style.transform = 'translateX(-' + this.initialWidth + 'px)';\n\n if (this.slides) {\n this.slides.map((el) => {\n el.nativeElement.style.width = this.initialWidth + 'px';\n });\n }\n } catch (e) {\n console.error('Error prepare feedback carousel');\n console.error(e);\n }\n }\n\n next(callback = null) {\n if (this.lock) {\n return;\n }\n this.slideActiveNumber++;\n const shift = this.initialWidth * this.slideActiveNumber;\n\n const animation: AnimationFactory = this.buildAnimation(shift);\n this.player = animation.create(this.line.nativeElement);\n try {\n // @ts-ignore\n Sentry.addBreadcrumb('Trying to play in feedback carousel');\n this.player.play();\n } catch (e) {\n console.error('No permissions to play sound');\n }\n this.lock = true;\n this.player.onDone(() => {\n this.lock = false;\n if (this.slideActiveNumber === this.data.length - 1) {\n this.timing = '0ms ease-in';\n this.slideActiveNumber = 0;\n this.next(() => {\n this.timing = '250ms ease-in';\n });\n }\n if (typeof callback === 'function') {\n callback();\n }\n });\n }\n\n previous(callback = null) {\n if (this.lock) {\n return;\n }\n this.slideActiveNumber--;\n const shift = this.initialWidth * this.slideActiveNumber;\n this.line.nativeElement.style.transform = 'translateX(-' + shift + 'px)';\n\n const animation: AnimationFactory = this.buildAnimation(shift);\n this.player = animation.create(this.line.nativeElement);\n try {\n // @ts-ignore\n Sentry.addBreadcrumb('Trying to play in feedback carousel previous');\n this.player.play();\n } catch (e) {\n console.error('No permissions to play sound');\n }\n this.lock = true;\n this.player.onDone(() => {\n this.lock = false;\n if (this.slideActiveNumber === 0) {\n this.timing = '0ms ease-in';\n this.slideActiveNumber = this.data.length - 1;\n this.previous(() => {\n this.timing = '250ms ease-in';\n });\n }\n if (typeof callback === 'function') {\n callback();\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.slides.map((el) => {\n el.nativeElement.style.width = this.initialWidth + 'px';\n });\n // if (this.data) {\n // this.finishRender.emit(true);\n // }\n // this.carouselFeedBackList.changes.subscribe(t => {\n // this.finishRender.emit(true);\n // });\n }\n\n ngOnDestroy(): void {\n if (this.player) {\n this.player.pause();\n this.player.destroy();\n }\n if (this.isBrowser) {\n cancelAnimationFrame(this.requestId);\n }\n this.requestId = undefined;\n }\n\n getImage(item: Recent) {\n return this.br.backendImageUrl + '/images/photo/' + item.consultant.photoOrig;\n }\n\n isActive(item) {\n return this.data[this.slideActiveNumber] === item;\n }\n\n getCleanData() {\n return this.data.filter((item, index) => {\n return (index !== 0) && (index !== this.data.length - 1);\n });\n }\n\n selectItem(item) {\n const index = this.data.findIndex(el => el === item);\n this.slideActiveNumber = index - 1;\n this.next();\n }\n\n openNotifyModal(reader) {\n const initialState = {\n readerId: reader.id,\n };\n this.bsModalRef = this.modalService.show(NotifyComponent, {\n initialState: initialState,\n class: 'modal-md',\n animated: false,\n });\n }\n\n private buildAnimation(offset) {\n return this.builder.build([\n animate(this.timing, style({transform: `translateX(-${offset}px)`})),\n ]);\n }\n\n // async onViewPort(event) {\n // switch (event.target.id) {\n // case 'readerFeebackCardView':\n // if (event.visible) {\n // if (this.readerFeebackCardComponent && !this.readerFeebackCardComponent.loaded) {\n // await this.readerFeebackCardComponent.preload();\n // this.showReaderFeebackCard = true;\n // }\n // }\n // break;\n // }\n // }\n\n // lazyInitReaderFeeBackCard({instance: lazyComponent}: ComponentRef) {\n //\n // // lazyComponent.context = item;\n // lazyComponent.type = '-carousel';\n // }\n}\n","import { NgModule } from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FeedbackCarouselComponent} from './feedback-carousel.component';\nimport {SharedModule} from '../../shared.module';\nimport {LoadableModule, matcher} from 'ngx-loadable';\nimport {InViewportModule} from 'ng-in-viewport';\nimport {ReaderFeedbackCardModule} from '../../primary-components/reader-feedback-card/reader-feedback-card.module';\n@NgModule({\n declarations: [FeedbackCarouselComponent],\n bootstrap: [FeedbackCarouselComponent],\n exports: [\n FeedbackCarouselComponent\n ],\n imports: [\n CommonModule,\n // SharedModule,\n ReaderFeedbackCardModule\n ]\n})\nexport class FeedbackCarouselModule { }\n"],"names":["BgSliderDirective","constructor","el","this","index","getRandom","slides","length","nativeElement","style","backgroundImage","min","max","Math","floor","random","i0","selectors","FeedbackCarouselComponent","modalService","builder","br","utilService","window","platformId","isPlatformBrowser","EventEmitter","ngOnInit","initialize","ngOnChanges","changes","self","data","push","plainToClass","Recent","unshift","map","item","num","setTimeout","prepare","setInterval","requestAnimationFrame","highResTimestamp","time","next","initialWidth","container","getBoundingClientRect","width","line","transform","e","console","error","callback","lock","slideActiveNumber","animation","buildAnimation","player","create","Sentry","play","onDone","timing","previous","shift","ngAfterViewInit","ngOnDestroy","pause","destroy","isBrowser","cancelAnimationFrame","requestId","undefined","getImage","backendImageUrl","consultant","photoOrig","isActive","getCleanData","filter","selectItem","findIndex","openNotifyModal","reader","bsModalRef","show","NotifyComponent","initialState","readerId","id","class","animated","offset","build","animate","WINDOW","PLATFORM_ID","ElementRef","FeedbackCarouselModule","bootstrap","CommonModule","ReaderFeedbackCardModule"],"mappings":";;gJAKO,IAAMA,EAAb,MAAM,QAOFC,YAAYC,GALZC,YAAS,CACL,iBACA,kBAIA,MAAMC,EAAQD,KAAKE,UAAU,EAAGF,KAAKG,OAAOC,QAE5CL,EAAGM,cAAcC,MAAMC,gBAAkB,OAAOP,KAAKG,OAAOF,MAGhEC,UAAUM,EAAKC,GACX,OAAOC,KAAKC,MAAMD,KAAKE,UAAYH,EAAMD,IAAQA,gDAd5CX,GAAiBgB,uCAAjBhB,EAAiBiB,oCAAjBjB,GAAb,8RCIwBgB,iBACIA,qBACIA,0CAEJA,QACJA,kCAHqCA,4BAAgB,mGAc7DA,iBAAIA,oFAEAA,mBACJA,+CAFIA,mFA1BpBA,eACIA,iBACIA,iBACIA,iBAAKA,8DACDA,kBACJA,QAEIA,mBACIA,mBACIA,gCAMJA,QACJA,QAEJA,mBAAKA,0DACDA,oBACJA,QACJA,QACAA,mBACAA,mBACIA,kBACIA,wBAIJA,QACJA,QACJA,QACJA,gCAvByEA,iCAgBTA,4CCOzD,IAAME,EAAb,MAAM,QA0BFjB,YACYkB,EACAC,EACAC,EACAC,EACgBC,EACKC,GALrBrB,oBACAA,eACAA,UACAA,mBACgBA,cACKA,kBA1BjCA,uBAAoB,EACpBA,YAAS,gBAETA,WAAO,EAGCA,UAAO,EAOPA,gBAAqBsB,QAAkBtB,KAAKqB,YAI1CrB,kBAAe,IAAIuB,MAc7BvB,UAAiB,GAEjBwB,WACIxB,KAAKyB,aAITC,YAAYC,GACR3B,KAAKyB,aAITA,aACI,MAAMG,EAAO5B,KACTA,KAAK6B,KAAKzB,OAAS,IAEnBJ,KAAK6B,KAAKC,MAAKC,QAAaC,IAAQhC,KAAK6B,KAAK,KAC9C7B,KAAK6B,KAAKI,WAAQF,MAAaC,IAAQhC,KAAK6B,KAAK7B,KAAK6B,KAAKzB,OAAS,KAEpEJ,KAAK6B,KAAO7B,KAAK6B,KAAKK,IAAI,CAACC,EAAMlC,KAC7BkC,EAAKC,IAAMnC,EACJkC,IAEXP,EAAKT,YAAYkB,WAAW,KACxBT,EAAKU,YAETtC,KAAKuC,eAwBbA,cACI,MAAMX,EAAO5B,KAoBbwC,sBAnBmBC,IACfb,EAAKc,OACa,MAAdd,EAAKc,OACLd,EAAKc,KAAO,EACZd,EAAKe,UAuBjBL,UACI,IACItC,KAAK4C,aAAe5C,KAAK6C,UAAUxC,cAAcyC,wBAAwBC,MACzE/C,KAAKgD,KAAK3C,cAAcC,MAAMyC,MAAQ/C,KAAK4C,aAAe5C,KAAK6B,KAAKzB,OAAS,KAC7EJ,KAAKgD,KAAK3C,cAAcC,MAAM2C,UAAY,eAAiBjD,KAAK4C,aAAe,MAE3E5C,KAAKG,QACLH,KAAKG,OAAO+B,IAAKnC,IACbA,EAAGM,cAAcC,MAAMyC,MAAQ/C,KAAK4C,aAAe,aAGtDM,GACLC,QAAQC,MAAM,mCACdD,QAAQC,MAAMF,IAItBP,KAAKU,EAAW,MACZ,GAAIrD,KAAKsD,KACL,OAEJtD,KAAKuD,oBACL,MAEMC,EAA8BxD,KAAKyD,eAF3BzD,KAAK4C,aAAe5C,KAAKuD,mBAGvCvD,KAAK0D,OAASF,EAAUG,OAAO3D,KAAKgD,KAAK3C,eACzC,IAEIuD,KAAqB,uCACrB5D,KAAK0D,OAAOG,aACPX,GACLC,QAAQC,MAAM,gCAElBpD,KAAKsD,MAAO,EACZtD,KAAK0D,OAAOI,OAAO,KACf9D,KAAKsD,MAAO,EACRtD,KAAKuD,oBAAsBvD,KAAK6B,KAAKzB,OAAS,IAC9CJ,KAAK+D,OAAS,cACd/D,KAAKuD,kBAAoB,EACzBvD,KAAK2C,KAAK,KACN3C,KAAK+D,OAAS,mBAGE,mBAAbV,GACPA,MAKZW,SAASX,EAAW,MAChB,GAAIrD,KAAKsD,KACL,OAEJtD,KAAKuD,oBACL,MAAMU,EAAQjE,KAAK4C,aAAe5C,KAAKuD,kBACvCvD,KAAKgD,KAAK3C,cAAcC,MAAM2C,UAAY,eAAiBgB,EAAQ,MAEnE,MAAMT,EAA8BxD,KAAKyD,eAAeQ,GACxDjE,KAAK0D,OAASF,EAAUG,OAAO3D,KAAKgD,KAAK3C,eACzC,IAEIuD,KAAqB,gDACrB5D,KAAK0D,OAAOG,aACPX,GACLC,QAAQC,MAAM,gCAElBpD,KAAKsD,MAAO,EACZtD,KAAK0D,OAAOI,OAAO,KACf9D,KAAKsD,MAAO,EACmB,IAA3BtD,KAAKuD,oBACLvD,KAAK+D,OAAS,cACd/D,KAAKuD,kBAAoBvD,KAAK6B,KAAKzB,OAAS,EAC5CJ,KAAKgE,SAAS,KACVhE,KAAK+D,OAAS,mBAGE,mBAAbV,GACPA,MAKZa,kBACIlE,KAAKG,OAAO+B,IAAKnC,IACbA,EAAGM,cAAcC,MAAMyC,MAAQ/C,KAAK4C,aAAe,OAU3DuB,cACQnE,KAAK0D,SACL1D,KAAK0D,OAAOU,QACZpE,KAAK0D,OAAOW,WAEZrE,KAAKsE,WACLC,qBAAqBvE,KAAKwE,WAE9BxE,KAAKwE,eAAYC,EAGrBC,SAASvC,GACL,OAAOnC,KAAKkB,GAAGyD,gBAAkB,iBAAmBxC,EAAKyC,WAAWC,UAGxEC,SAAS3C,GACL,OAAOnC,KAAK6B,KAAK7B,KAAKuD,qBAAuBpB,EAGjD4C,eACI,OAAO/E,KAAK6B,KAAKmD,OAAO,CAAC7C,EAAMlC,IACT,IAAVA,GAAiBA,IAAUD,KAAK6B,KAAKzB,OAAS,GAI9D6E,WAAW9C,GACP,MAAMlC,EAAQD,KAAK6B,KAAKqD,UAAUnF,GAAMA,IAAOoC,GAC/CnC,KAAKuD,kBAAoBtD,EAAQ,EACjCD,KAAK2C,OAGTwC,gBAAgBC,GAIZpF,KAAKqF,WAAarF,KAAKgB,aAAasE,KAAKC,IAAiB,CACtDC,aAJiB,CACjBC,SAAUL,EAAOM,IAIjBC,MAAO,WACPC,UAAU,IAIVnC,eAAeoC,GACnB,OAAO7F,KAAKiB,QAAQ6E,MAAM,IACtBC,MAAQ/F,KAAK+D,UAAQzD,MAAM,CAAC2C,UAAW,eAAe4C,0DA9PrD9E,GAAyBF,oDA+BtBmF,KAAMnF,MACNoF,iCAhCHlF,EAAyBD,uGAaJoF,03BD7ClCrF,6BAAMA,q9LCgCOE,GAAb,sICbO,IAAMoF,EAAb,MAAM,sDAAOA,8BAAsBC,WAVnBrF,mCAIH,CACLsF,KAEAC,QAGKH,GAAb","debug_id":"172b74a7-54c7-5ea3-8fae-7ce998319c99"}