{"version":3,"sources":["./src/app/modules/core/models/event-type.ts","./src/app/modules/cocktail/models/enums/filter-cocktails-field-type.enum.ts","./src/app/modules/cocktail/configuration/filter-cocktails-fields-configuration.ts","./node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js","./src/app/modules/core/services/event-bus-service.service.ts","./src/app/modules/cocktail/models/enums/cocktail-complexity.enum.ts","./src/app/modules/cocktail/components/cocktail-complexity/cocktail-complexity.component.html","./src/app/modules/cocktail/components/cocktail-complexity/cocktail-complexity.component.ts","./src/app/modules/cocktail/components/cocktail/cocktail.component.ts","./src/app/modules/cocktail/components/cocktail/cocktail.component.html","./src/app/modules/cocktail/components/cocktail-lists/cocktail-lists.component.html","./src/app/modules/cocktail/components/cocktail-lists/cocktail-lists.component.ts","./src/app/modules/cocktail/components/cocktail-filter/cocktail-filter.component.html","./src/app/modules/cocktail/components/cocktail-filter/cocktail-filter.component.ts","./src/app/modules/shared/factories/form.factory.ts","./src/app/modules/cocktail/components/cocktail-container/cocktail-container.component.ts","./src/app/modules/cocktail/components/cocktail-container/cocktail-container.component.html","./src/app/modules/cocktail/cocktail.module.ts"],"names":["EventTypeEnum","EnumFilterCocktailsFieldType","filterCocktailsFieldsConfiguration","formId","fields","isReadOnly","name","COMPLEXITY","MOMENT","PRODUCT","DistinctUntilChangedOperator","compare","keySelector","this","subscriber","source","subscribe","Subscriber","destination","super","hasKey","x","y","value","key","err","error","result","next","EventBusServiceService","eventNotifierSubject","BehaviorSubject","type","undefined","payload","eventNotifier$","asObservable","pipe","lift","event","CocktailComplexityEnum","CocktailComplexityComponent","cocktailComplexityEnum","CocktailComponent","CocktailListsComponent","eventBusService","_cocktails","internalInit","config","cocktails","subscribeToFilterCocktailsCommand","filter","filterCocktailsCommand","command","handleFilterCocktailEvent","complexity","moment","product","filtedCocktails","CocktailFilterComponent","elementRef","enumFilterCocktailsFieldType","appliedFilters","fieldConfiguration","buidlForm","filterCocktailsForm","data","formGroup","fieldControls","forEach","item","addControl","Object","keys","controls","foundControlConfig","find","s","control","get","disable","configurableFormFactory","triggerFilterCocktailsCommand","appliedFilter","index","indexOf","splice","form","formKey","setValue","document","querySelector","getFilterNum","click","filters","sample","model","JSON","parse","stringify","field","toLowerCase","retrieveAppliedFilters","notifyEvent","push","number","onClick","CocktailContainerComponent","dataInitialValue","Parse","CocktailModule","provide","useValue","multi"],"mappings":"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","file":"cocktail-cocktail-module.js","sourcesContent":["export enum EventTypeEnum {\r\n undefined,\r\n filterCocktailsCommand\r\n}\r\n","export enum EnumFilterCocktailsFieldType {\r\n MOMENT = 'moment',\r\n PRODUCT = 'product',\r\n COMPLEXITY = 'complexity',\r\n}\r\n","import { FormFieldsDataConfiguration } from \"app/modules/shared/models/form-fields-data-configuration\";\r\nimport { EnumFilterCocktailsFieldType } from \"../models/enums/filter-cocktails-field-type.enum\";\r\n\r\nexport const filterCocktailsFieldsConfiguration: FormFieldsDataConfiguration = {\r\n formId: 'filterCocktailsForm',\r\n fields: [\r\n {\r\n isReadOnly: false,\r\n name: EnumFilterCocktailsFieldType.COMPLEXITY\r\n },\r\n {\r\n isReadOnly: false,\r\n name: EnumFilterCocktailsFieldType.MOMENT\r\n },\r\n {\r\n isReadOnly: false,\r\n name: EnumFilterCocktailsFieldType.PRODUCT\r\n }\r\n ]\r\n}\r\n","import { Subscriber } from '../Subscriber';\nexport function distinctUntilChanged(compare, keySelector) {\n return (source) => source.lift(new DistinctUntilChangedOperator(compare, keySelector));\n}\nclass DistinctUntilChangedOperator {\n constructor(compare, keySelector) {\n this.compare = compare;\n this.keySelector = keySelector;\n }\n call(subscriber, source) {\n return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));\n }\n}\nclass DistinctUntilChangedSubscriber extends Subscriber {\n constructor(destination, compare, keySelector) {\n super(destination);\n this.keySelector = keySelector;\n this.hasKey = false;\n if (typeof compare === 'function') {\n this.compare = compare;\n }\n }\n compare(x, y) {\n return x === y;\n }\n _next(value) {\n let key;\n try {\n const { keySelector } = this;\n key = keySelector ? keySelector(value) : value;\n }\n catch (err) {\n return this.destination.error(err);\n }\n let result = false;\n if (this.hasKey) {\n try {\n const { compare } = this;\n result = compare(this.key, key);\n }\n catch (err) {\n return this.destination.error(err);\n }\n }\n else {\n this.hasKey = true;\n }\n if (!result) {\n this.key = key;\n this.destination.next(value);\n }\n }\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { TanquerayEvent } from '../models/event';\nimport { EventTypeEnum } from '../models/event-type';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventBusServiceService {\n\n private eventNotifierSubject: BehaviorSubject = new BehaviorSubject({\n type: EventTypeEnum.undefined,\n key: '',\n payload: ''\n });\n\n eventNotifier$: Observable = this.eventNotifierSubject.asObservable().pipe(distinctUntilChanged())\n\n constructor() { }\n\n\n notifyEvent(event: TanquerayEvent) {\n this.eventNotifierSubject.next(event);\n }\n}\n","export enum CocktailComplexityEnum {\r\n EASY = \"1\",\r\n INTERMEDIATE = \"2\",\r\n DIFFICULT = \"3\"\r\n}\r\n","\n Dificultad:\n Fácil\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 { Component, Input, OnInit } from '@angular/core';\nimport { CocktailComplexityEnum } from '../../models/enums/cocktail-complexity.enum';\n\n@Component({\n selector: 'app-cocktail-complexity',\n templateUrl: './cocktail-complexity.component.html',\n styleUrls: ['./cocktail-complexity.component.css']\n})\nexport class CocktailComplexityComponent {\n\n @Input() complexity: string;\n @Input() starImage: string;\n @Input() noStarImage: string;\n\n public cocktailComplexityEnum = CocktailComplexityEnum;\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { CocktailModel } from '../../models/cocktail-model';\nimport { Resources } from '../../models/resources.model';\n\n@Component({\n selector: 'app-cocktail',\n templateUrl: './cocktail.component.html',\n styleUrls: ['./cocktail.component.css'],\n host: { class: 'box-coctel' },\n})\nexport class CocktailComponent {\n\n @Input() cocktail: CocktailModel;\n @Input() resources: Resources;\n\n}\n","\n
\n

{{ cocktail.title }}

\n

{{ cocktail.content }}

\n {{cocktail.subtitle}}\n
    \n \n
    \n","\n \n\n\n\n {{ config.resources.filterNotFoundText }}\n\n","import { Component, Input, OnInit } from '@angular/core';\nimport { EventTypeEnum } from 'app/modules/core/models/event-type';\nimport { EventBusServiceService } from 'app/modules/core/services/event-bus-service.service';\nimport { filter } from 'rxjs/operators';\nimport { CocktailConfiguration } from '../../models/cocktail-configuration';\nimport { CocktailModel } from '../../models/cocktail-model';\nimport { FilterCocktailsCommand } from '../../models/commands/filter-cocktails-command';\n\n@Component({\n selector: 'app-cocktail-lists',\n templateUrl: './cocktail-lists.component.html',\n styleUrls: ['./cocktail-lists.component.css'],\n host: { class: 'box-result' },\n})\nexport class CocktailListsComponent implements OnInit {\n _cocktails: Array = [];\n @Input() config: CocktailConfiguration;\n\n constructor(private eventBusService: EventBusServiceService) {}\n\n ngOnInit(): void {\n this.internalInit();\n }\n\n private internalInit(): void {\n this._cocktails = this.config.cocktails;\n this.subscribeToFilterCocktailsCommand();\n }\n\n private subscribeToFilterCocktailsCommand(): void {\n this.eventBusService.eventNotifier$\n .pipe(\n filter(\n (x: FilterCocktailsCommand) =>\n x.type === EventTypeEnum.filterCocktailsCommand\n )\n )\n .subscribe({\n next: (command) => {\n this.handleFilterCocktailEvent(command);\n },\n });\n }\n\n private handleFilterCocktailEvent(command: FilterCocktailsCommand): void {\n\n if(!command.filter.complexity &&\n !command.filter.moment &&\n !command.filter.product) {\n this._cocktails = this.config.cocktails;\n }\n\n let filtedCocktails = this.config.cocktails;\n if (command.filter.complexity) {\n filtedCocktails = filtedCocktails.filter(\n (x) => x.complexity === command.filter.complexity\n );\n }\n\n if (command.filter.moment) {\n filtedCocktails = filtedCocktails.filter(\n (x) => x.moment === command.filter.moment\n );\n }\n\n if (command.filter.product) {\n filtedCocktails = filtedCocktails.filter(\n (x) => x.product === command.filter.product\n );\n }\n\n this._cocktails = filtedCocktails;\n }\n}\n","\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n \r\n {{ momentItem.key }}\r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n {{ productItem.key }}\r\n \r\n \r\n
    \r\n \r\n\r\n \r\n
    \r\n \r\n \r\n {{ complexityItem.key }}\r\n \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n 0\">\r\n

    \r\n {{ config.resources.filterTitleText }}\r\n

    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n\r\n","import { Component, ElementRef, Input, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { EventTypeEnum } from 'app/modules/core/models/event-type';\r\nimport { EventBusServiceService } from 'app/modules/core/services/event-bus-service.service';\r\nimport { configurableFormFactory } from 'app/modules/shared/factories/form.factory';\r\nimport { FormFieldsDataConfiguration } from 'app/modules/shared/models/form-fields-data-configuration';\r\nimport { filterCocktailsFieldsConfiguration } from '../../configuration/filter-cocktails-fields-configuration';\r\nimport { AppliedFilter } from '../../models/applied-filter.model';\r\nimport { CocktailConfiguration } from '../../models/cocktail-configuration';\r\nimport { FilterCocktailsCommand } from '../../models/commands/filter-cocktails-command';\r\nimport { EnumFilterCocktailsFieldType } from '../../models/enums/filter-cocktails-field-type.enum';\r\nimport { FilterCoctails } from '../../models/filter-coctails';\r\n\r\n@Component({\r\n selector: 'app-cocktail-filter',\r\n templateUrl: './cocktail-filter.component.html',\r\n styleUrls: ['./cocktail-filter.component.css'],\r\n})\r\nexport class CocktailFilterComponent implements OnInit {\r\n @Input() config: CocktailConfiguration;\r\n\r\n public filterCocktailsForm: FormGroup;\r\n public enumFilterCocktailsFieldType = EnumFilterCocktailsFieldType;\r\n public filters: FilterCoctails;\r\n public appliedFilters: Array = [];\r\n private fieldConfiguration: FormFieldsDataConfiguration =\r\n filterCocktailsFieldsConfiguration;\r\n\r\n constructor(private eventBusService: EventBusServiceService, private elementRef: ElementRef) {}\r\n\r\n ngOnInit(): void {\r\n this.internalInit();\r\n }\r\n\r\n private internalInit(): void {\r\n this.buidlForm();\r\n }\r\n\r\n private buidlForm(): void {\r\n this.filterCocktailsForm = configurableFormFactory.buildForm({\r\n formId: this.fieldConfiguration.formId,\r\n fields: this.fieldConfiguration.fields,\r\n });\r\n }\r\n\r\n onClick(): void {\r\n this.triggerFilterCocktailsCommand();\r\n }\r\n\r\n removeFilter(appliedFilter: AppliedFilter): void {\r\n const filter = this.appliedFilters.find((x) => x.key === appliedFilter.key);\r\n if (!filter) return;\r\n\r\n const index = this.appliedFilters.indexOf(filter);\r\n\r\n if (index > -1) {\r\n this.appliedFilters.splice(index, 1);\r\n const form = this.filterCocktailsForm.get(appliedFilter.formKey);\r\n if (form) {\r\n form.setValue('');\r\n const option: HTMLElement = document.querySelector(\r\n '.filtro' + this.getFilterNum(appliedFilter.formKey) + ' li.option.null'\r\n ) as HTMLElement;\r\n option.click();\r\n\r\n this.triggerFilterCocktailsCommand();\r\n }\r\n }\r\n }\r\n\r\n triggerFilterCocktailsCommand(): void {\r\n this.filters = configurableFormFactory.mapFormToModel(\r\n this.filterCocktailsForm,\r\n this.fieldConfiguration.fields,\r\n this.filterCocktailsForm.value\r\n );\r\n\r\n this.appliedFilters = this.retrieveAppliedFilters();\r\n\r\n const event: FilterCocktailsCommand = {\r\n type: EventTypeEnum.filterCocktailsCommand,\r\n filter: this.filters,\r\n };\r\n this.eventBusService.notifyEvent(event);\r\n }\r\n\r\n private retrieveAppliedFilters(): Array {\r\n let result: Array = [];\r\n if (this.filters) {\r\n Object.keys(this.filters).forEach((key) => {\r\n const value = this.filters[key];\r\n if (value) {\r\n const filter = this.config.filters[key].find(\r\n (x) => x.value === value\r\n );\r\n result.push({ key: filter.key, value: filter.value, formKey: key });\r\n }\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n private getFilterNum(key: string): number {\r\n var number = 0;\r\n switch (key) {\r\n case this.enumFilterCocktailsFieldType.MOMENT:\r\n number = 1;\r\n break;\r\n case this.enumFilterCocktailsFieldType.PRODUCT:\r\n number = 2;\r\n break;\r\n case this.enumFilterCocktailsFieldType.COMPLEXITY:\r\n number = 3;\r\n break;\r\n }\r\n return number;\r\n }\r\n}\r\n","import { FormControl, FormGroup } from \"@angular/forms\";\r\nimport { FormFieldDataConfiguration } from \"../models/form-fields-data-config.model\";\r\nimport { FormFieldsDataConfiguration } from \"../models/form-fields-data-configuration\";\r\n\r\nfunction buildForm(data: FormFieldsDataConfiguration): FormGroup {\r\n const formGroup = new FormGroup({});\r\n const fieldControls: FormFieldDataConfiguration[] = data.fields;\r\n\r\n fieldControls.forEach(item => {\r\n formGroup.addControl(item.name, new FormControl(''));\r\n });\r\n\r\n Object.keys(formGroup.controls).forEach(key => {\r\n const foundControlConfig = fieldControls.find(s => key === s.name);\r\n if (foundControlConfig) {\r\n const control = formGroup.get(key);\r\n\r\n if (foundControlConfig.isReadOnly) {\r\n control.disable();\r\n }\r\n }\r\n });\r\n return formGroup;\r\n}\r\n\r\nfunction mapFormToModel(form: FormGroup, fields: FormFieldDataConfiguration[], sample: T): T {\r\n const model = JSON.parse(JSON.stringify(sample));\r\n fields.forEach(field => {\r\n const control = form.get(field.name);\r\n if (control) {\r\n const key = Object.keys(sample).find(x => x.toLowerCase() === field.name.toLowerCase());\r\n model[key] = control.value;\r\n }\r\n });\r\n return model;\r\n}\r\n\r\n\r\nexport const configurableFormFactory = {\r\n buildForm,\r\n mapFormToModel\r\n};\r\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { DataInitialValueServiceService } from 'app/modules/core/services/data-initial-value-service.service';\nimport { CocktailConfiguration } from '../../models/cocktail-configuration';\n\n@Component({\n selector: 'app-cocktail-container',\n templateUrl: './cocktail-container.component.html',\n styleUrls: ['./cocktail-container.component.css'],\n})\nexport class CocktailContainerComponent implements OnInit {\n config: CocktailConfiguration;\n constructor(\n private elementRef: ElementRef,\n private dataInitialValue: DataInitialValueServiceService\n ) {\n this.config = this.dataInitialValue.Parse(\n this.elementRef\n );\n }\n\n ngOnInit(): void {\n }\n\n}\n","\n\n","import { NgModule } from '@angular/core';\nimport { CocktailContainerComponent } from './components/cocktail-container/cocktail-container.component';\nimport { CocktailFilterComponent } from './components/cocktail-filter/cocktail-filter.component';\nimport { CocktailListsComponent } from './components/cocktail-lists/cocktail-lists.component';\nimport { CocktailComponent } from './components/cocktail/cocktail.component';\nimport { SharedModule } from '../shared/shared.module';\nimport { CocktailComplexityComponent } from './components/cocktail-complexity/cocktail-complexity.component';\n\n@NgModule({\n declarations: [\n CocktailContainerComponent,\n CocktailFilterComponent,\n CocktailListsComponent,\n CocktailComponent,\n CocktailComplexityComponent\n ],\n imports: [\n SharedModule\n ],\n providers: [\n {\n provide: 'components',\n useValue: [CocktailContainerComponent, CocktailFilterComponent],\n multi: true\n }\n ],\n entryComponents: [\n CocktailContainerComponent\n ],\n})\nexport class CocktailModule { }\n"],"sourceRoot":"webpack:///"}