{"version":3,"file":"main-class-componentes-form.mjs","sources":["../../../../projects/main-class/componentes/form/src/form.component.ts","../../../../projects/main-class/componentes/form/src/form.component.html","../../../../projects/main-class/componentes/form/src/single-click.directive.ts","../../../../projects/main-class/componentes/form/src/mensagens-erro/mensagens-erro.component.ts","../../../../projects/main-class/componentes/form/src/mensagens-erro/mensagens-erro.component.html","../../../../projects/main-class/componentes/form/main-class-componentes-form.ts"],"sourcesContent":["import {\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  ViewChild\n} from '@angular/core';\nimport {FormsModule, NgForm, NgModel} from '@angular/forms';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {throttleTime} from 'rxjs/operators';\n\n@Component({\n  selector: 'mcl-form',\n  templateUrl: './form.component.html',\n  imports: [\n    FormsModule\n  ],\n  styleUrls: ['./form.component.scss']\n})\nexport class FormComponent implements OnInit, OnDestroy, AfterViewInit {\n\n  @Output() submitted = new EventEmitter<NgForm>();\n\n  @Input()\n  throttleMillis = 500;\n\n  private eventSubject = new Subject<NgForm>();\n  private subscription?: Subscription;\n\n  @ContentChildren(NgModel, {descendants: true}) public models!: QueryList<NgModel>;\n  @ViewChild(NgForm) form!: NgForm;\n\n  private currentModels: Array<NgModel> = [];\n\n  constructor() {\n  }\n\n  ngOnInit(): void {\n    this.subscription = this.eventSubject\n      .pipe(throttleTime(this.throttleMillis))\n      .subscribe((v) => {\n        this.submitted.emit(v);\n      });\n  }\n\n  ngOnDestroy() {\n    this.eventSubject.complete();\n    this.subscription?.unsubscribe();\n    this.submitted.unsubscribe();\n  }\n\n  ngAfterViewInit() {\n    this.models.changes.subscribe(() => {\n      this.atualizaModels();\n    });\n\n    this.atualizaModels();\n  }\n\n  private atualizaModels() {\n    const ngContentModels = this.models.toArray();\n\n    for (let i = 0; i < this.currentModels.length;) {\n      const model = this.currentModels[i];\n      if (ngContentModels.indexOf(model) < 0) {\n        this.form.removeControl(model);\n        model.control.setParent(null);\n        this.currentModels.splice(i, 1);\n      } else {\n        i++;\n      }\n    }\n\n    ngContentModels.forEach(model => {\n      if (this.currentModels.indexOf(model) < 0) {\n        this.currentModels.push(model);\n        this.form.addControl(model);\n        model.control.setParent(this.form.form);\n      }\n    });\n  }\n\n  touched() {\n    this.models.toArray().forEach((model) => {\n      model.control.markAsTouched();\n      model.control.markAsDirty();\n      model.control.updateValueAndValidity();\n    });\n  }\n\n  untouched() {\n    this.models.toArray().forEach((model) => {\n      model.control.markAsPristine();\n      model.control.markAsUntouched();\n      model.control.updateValueAndValidity();\n    });\n  }\n\n  reset(): Observable<any> {\n    this.form.resetForm();\n    this.form.control.markAsPending();\n    this.models.toArray().forEach((model) => {\n      model.control.reset();\n      model.control.setErrors(null);\n      model.control.updateValueAndValidity();\n    });\n\n    return new Observable(observer => {\n      setTimeout(() => {\n        observer.next(null);\n        observer.complete();\n      }, 300);\n    });\n  }\n\n  submit(form: NgForm) {\n    if (!form.valid) {\n      this.touched();\n      return;\n    }\n\n    this.eventSubject.next(form);\n  }\n}\n","<form #form=\"ngForm\" (ngSubmit)=\"submit(form)\">\n  <ng-content></ng-content>\n</form>\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {fromEvent, Subscription} from 'rxjs';\nimport {throttleTime} from 'rxjs/operators';\n\n@Directive({\n  selector: '[mclSingleClick],[singleClick]'\n})\nexport class SingleClickDirective implements OnInit, OnDestroy {\n  private subscription?: Subscription;\n\n  @Input()\n  throttleMillis = 500;\n\n  @Output()\n  singleClick = new EventEmitter();\n\n  constructor(private elementRef: ElementRef) {\n  }\n\n  ngOnInit(): void {\n    this.subscription = fromEvent(this.elementRef.nativeElement, 'click')\n      .pipe(throttleTime(this.throttleMillis))\n      .subscribe((v) => {\n        this.singleClick.emit(v);\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.subscription?.unsubscribe();\n    this.singleClick.unsubscribe();\n  }\n\n}\n","import {Component, inject, Input, OnInit} from '@angular/core';\nimport {FormComponent} from '../form.component';\nimport {ControlContainer, FormArray, FormControl, FormGroup} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {MatFormField} from '@angular/material/input';\n\n@Component({\n  selector: '[mclErrorFor],[mclError]',\n  templateUrl: './mensagens-erro.component.html',\n  imports: [\n    TranslatePipe,\n  ],\n  styleUrls: ['./mensagens-erro.component.scss']\n})\nexport class MensagensErroComponent implements OnInit {\n\n  @Input('mclErrorFor') for?: string | FormControl;\n\n  matFormField = inject(MatFormField, {optional: true, host: true});\n  mcForm = inject(FormComponent, {optional: true, host: true});\n  container = inject(ControlContainer, {optional: true, host: true});\n\n  get group() {\n    return this.matFormField?._control?.ngControl?.control?.parent || this.container?.control || this.mcForm?.form;\n  }\n\n  ngOnInit(): void {\n  }\n\n  get control() {\n    if (typeof this.for === 'string') {\n      const group = this.group;\n      if (group instanceof FormGroup) {\n        return group?.controls && group?.controls[this.for];\n      } else if (group instanceof FormArray) {\n        return group?.controls?.at(Number(this.for));\n      }\n    } else if (this.for instanceof FormControl) {\n      return this.for;\n    }\n\n    return this.matFormField?._control?.ngControl?.control;\n  }\n\n  get errors() {\n    if (!!this.control?.errors) {\n      return Object.keys(this.control.errors);\n    }\n\n    return undefined;\n  }\n\n}\n","@if (errors?.length) {\n  <span>{{ 'validation.' + errors![0] | translate:control!.errors![errors![0]] }}</span>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}