radio-group.component.mjs 12 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Optional, Output, forwardRef, } from '@angular/core';
  2. import { FormGenericComponent } from '../../services/form-generic.abstract';
  3. import { provideControlContainer, provideValueAccessor } from '../utils/form.util';
  4. import { RadioButtonComponent } from '../radio-button/radio-button.component';
  5. import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
  6. import { LabelComponent } from '../label/label.component';
  7. import { FormErrorComponent } from '../error/error.component';
  8. import * as i0 from "@angular/core";
  9. import * as i1 from "@angular/forms";
  10. export class RadioGroupComponent extends FormGenericComponent {
  11. constructor(destroyRef, formGroupDirective) {
  12. super(formGroupDirective);
  13. this.destroyRef = destroyRef;
  14. this.formGroupDirective = formGroupDirective;
  15. this.formControlName = '';
  16. this.key = '';
  17. this.label = '';
  18. this.value = '';
  19. this.helper = '';
  20. this.showError = false;
  21. this.selected = new EventEmitter();
  22. }
  23. ngAfterContentInit() {
  24. if (this.value)
  25. this.writeValue(this.value);
  26. this.radios.forEach(radio => radio.valueChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(value => this.setValue(value)));
  27. }
  28. writeValue(value) {
  29. this.value = value;
  30. if (this.radios)
  31. this.updateRadios(value);
  32. }
  33. setValue(value) {
  34. this.value = value;
  35. this.updateRadios(value);
  36. this.triggerChange(value);
  37. this.selected.emit(value);
  38. }
  39. updateRadios(value) {
  40. this.radios.forEach(radio => {
  41. radio.writeValue(radio.value === value);
  42. });
  43. }
  44. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RadioGroupComponent, deps: [{ token: i0.DestroyRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
  45. static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: RadioGroupComponent, isStandalone: true, selector: "ct-radio-group", inputs: { formControlName: "formControlName", key: "key", label: "label", value: "value", helper: "helper", showError: "showError" }, outputs: { selected: "selected" }, providers: [provideValueAccessor(forwardRef(() => RadioGroupComponent))], queries: [{ propertyName: "radios", predicate: RadioButtonComponent }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex w-full flex-col gap-4\">\n @if (label) {\n <ct-form-label [text]=\"label\" [hasError]=\"hasErrors(formControl)\" [showError]=\"showError\" />\n }\n <div class=\"flex w-full flex-col justify-between gap-4 md:flex-row\">\n <ng-content select=\"ct-radio-button\" />\n </div>\n @if (formControl) {\n <ct-form-alert\n [hasErrors]=\"hasErrors(formControl)\"\n [helper]=\"helper\"\n [errors]=\"formControl.errors ?? {}\"\n size=\"xs\" />\n }\n</div>\n", dependencies: [{ kind: "component", type: LabelComponent, selector: "ct-form-label", inputs: ["text", "type", "formControlName", "hasError", "showError"] }, { kind: "component", type: FormErrorComponent, selector: "ct-form-alert", inputs: ["errors", "size", "hasErrors", "fullSize", "helper", "errorMessages"] }], viewProviders: [provideControlContainer()], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
  46. }
  47. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RadioGroupComponent, decorators: [{
  48. type: Component,
  49. args: [{ selector: 'ct-radio-group', standalone: true, imports: [LabelComponent, FormErrorComponent], providers: [provideValueAccessor(forwardRef(() => RadioGroupComponent))], viewProviders: [provideControlContainer()], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex w-full flex-col gap-4\">\n @if (label) {\n <ct-form-label [text]=\"label\" [hasError]=\"hasErrors(formControl)\" [showError]=\"showError\" />\n }\n <div class=\"flex w-full flex-col justify-between gap-4 md:flex-row\">\n <ng-content select=\"ct-radio-button\" />\n </div>\n @if (formControl) {\n <ct-form-alert\n [hasErrors]=\"hasErrors(formControl)\"\n [helper]=\"helper\"\n [errors]=\"formControl.errors ?? {}\"\n size=\"xs\" />\n }\n</div>\n" }]
  50. }], ctorParameters: () => [{ type: i0.DestroyRef }, { type: i1.FormGroupDirective, decorators: [{
  51. type: Optional
  52. }] }], propDecorators: { formControlName: [{
  53. type: Input
  54. }], key: [{
  55. type: Input
  56. }], label: [{
  57. type: Input
  58. }], value: [{
  59. type: Input
  60. }], helper: [{
  61. type: Input
  62. }], showError: [{
  63. type: Input
  64. }], selected: [{
  65. type: Output
  66. }], radios: [{
  67. type: ContentChildren,
  68. args: [RadioButtonComponent]
  69. }] } });
  70. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lyY2xldG9uZS9zcmMvbGliL2Zvcm1zL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpcmNsZXRvbmUvc3JjL2xpYi9mb3Jtcy9yYWRpby1ncm91cC9yYWRpby1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQVk5RCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsb0JBQW9CO0lBVzNELFlBQ21CLFVBQXNCLEVBQ1Isa0JBQXNDO1FBRXJFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBSFQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNSLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFaOUQsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ2hCLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBUzdDLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQzFCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDckcsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBVTtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXpDVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixzT0FMbkIsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGlEQWN2RCxvQkFBb0Isb0RDeEN2QyxtZkFlQSw0Q0RTWSxjQUFjLGdJQUFFLGtCQUFrQiwrSEFHN0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDOzsyRkFJL0IsbUJBQW1CO2tCQVYvQixTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxhQUVsQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLGlCQUN6RCxDQUFDLHVCQUF1QixFQUFFLENBQUMsbUJBRXpCLHVCQUF1QixDQUFDLE1BQU07OzBCQWU1QyxRQUFRO3lDQVpGLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFFZ0MsTUFBTTtzQkFBNUMsZUFBZTt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERlc3Ryb3lSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR2VuZXJpY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tZ2VuZXJpYy5hYnN0cmFjdCc7XG5pbXBvcnQgeyBwcm92aWRlQ29udHJvbENvbnRhaW5lciwgcHJvdmlkZVZhbHVlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9mb3JtLnV0aWwnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmFkaW9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uL2xhYmVsL2xhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtRXJyb3JDb21wb25lbnQgfSBmcm9tICcuLi9lcnJvci9lcnJvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjdC1yYWRpby1ncm91cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtMYWJlbENvbXBvbmVudCwgRm9ybUVycm9yQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVZhbHVlQWNjZXNzb3IoZm9yd2FyZFJlZigoKSA9PiBSYWRpb0dyb3VwQ29tcG9uZW50KSldLFxuICB2aWV3UHJvdmlkZXJzOiBbcHJvdmlkZUNvbnRyb2xDb250YWluZXIoKV0sXG5cbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJhZGlvR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBGb3JtR2VuZXJpY0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWUgPSAnJztcbiAgQElucHV0KCkga2V5ID0gJyc7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHZhbHVlOiBhbnkgPSAnJztcbiAgQElucHV0KCkgaGVscGVyID0gJyc7XG4gIEBJbnB1dCgpIHNob3dFcnJvciA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKFJhZGlvQnV0dG9uQ29tcG9uZW50KSByYWRpb3MhOiBRdWVyeUxpc3Q8UmFkaW9CdXR0b25Db21wb25lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZjogRGVzdHJveVJlZixcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgb3ZlcnJpZGUgZm9ybUdyb3VwRGlyZWN0aXZlOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7XG4gICAgc3VwZXIoZm9ybUdyb3VwRGlyZWN0aXZlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZSkgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMucmFkaW9zLmZvckVhY2gocmFkaW8gPT5cbiAgICAgIHJhZGlvLnZhbHVlQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnNldFZhbHVlKHZhbHVlKSlcbiAgICApO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnJhZGlvcykgdGhpcy51cGRhdGVSYWRpb3ModmFsdWUpO1xuICB9XG5cbiAgc2V0VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVJhZGlvcyh2YWx1ZSk7XG4gICAgdGhpcy50cmlnZ2VyQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGVkLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSYWRpb3ModmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmFkaW9zLmZvckVhY2gocmFkaW8gPT4ge1xuICAgICAgcmFkaW8ud3JpdGVWYWx1ZShyYWRpby52YWx1ZSA9PT0gdmFsdWUpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTRcIj5cbiAgQGlmIChsYWJlbCkge1xuICAgIDxjdC1mb3JtLWxhYmVsIFt0ZXh0XT1cImxhYmVsXCIgW2hhc0Vycm9yXT1cImhhc0Vycm9ycyhmb3JtQ29udHJvbClcIiBbc2hvd0Vycm9yXT1cInNob3dFcnJvclwiIC8+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBnYXAtNCBtZDpmbGV4LXJvd1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImN0LXJhZGlvLWJ1dHRvblwiIC8+XG4gIDwvZGl2PlxuICBAaWYgKGZvcm1Db250cm9sKSB7XG4gICAgPGN0LWZvcm0tYWxlcnRcbiAgICAgIFtoYXNFcnJvcnNdPVwiaGFzRXJyb3JzKGZvcm1Db250cm9sKVwiXG4gICAgICBbaGVscGVyXT1cImhlbHBlclwiXG4gICAgICBbZXJyb3JzXT1cImZvcm1Db250cm9sLmVycm9ycyA/PyB7fVwiXG4gICAgICBzaXplPVwieHNcIiAvPlxuICB9XG48L2Rpdj5cbiJdfQ==