import { EventEmitter, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { FieldSchemaDef, RequestTypeConfig } from '../../../services/requests/types'; import { InputMetadata, InputOption, InputType } from '../../types'; import { EmptyStateMetadata } from '../../molecules/empty-state/types'; import { SurveyResponseMetadata, SurveyResponseSubmitEvent } from './types'; import * as i0 from "@angular/core"; /** * val-survey-response * * Toma una encuesta (`RequestTypeConfig` con `Type: "survey:"`, ADR-092) * y la presenta como formulario de respuesta — el organism que un visitante * ve al abrir el link de una encuesta. Self-contained, igual que * `val-content-reaction`/`val-access-request-view`: lee el tipo, arma el * formulario, envía la respuesta, sin que el consumer tenga que orquestar * nada de eso. * * Solo lee tipos `visibility: 'PUBLIC'` (vía `getPublicRequestType`, sin * auth) — es el caso de uso que describe el ADR (link enviado a compradores, * que pueden no tener cuenta). Encuestas AUTHENTICATED/ORG/INTERNAL están * fuera de alcance de este componente por ahora. * * Cada pregunta se renderiza según su `FieldSchemaDef.type`: `EMOJI_RATING` * usa `val-emoji-rating` (NUNCA pasa por `val-form`, no lo sabe rutear); * cualquier otro tipo (v1: solo `TEXTAREA`) usa `val-textarea-input`. No hay * `val-form` de por medio — un FormGroup armado a mano, porque mezclar tipos * custom con el form genérico es más complicado que construir el propio. */ export declare class SurveyResponseComponent implements OnInit { props: SurveyResponseMetadata; readonly submitted: EventEmitter; private readonly i18n; private readonly auth; private readonly requests; private readonly errors; readonly emojiType = "EMOJI_RATING"; readonly selectType = InputType.SELECT; readonly loading: import("@angular/core").WritableSignal; readonly loadError: import("@angular/core").WritableSignal; readonly sent: import("@angular/core").WritableSignal; readonly sending: import("@angular/core").WritableSignal; readonly typeConfig: import("@angular/core").WritableSignal; readonly multiSelectError: import("@angular/core").WritableSignal; readonly alreadyAnswered: import("@angular/core").WritableSignal; readonly nameControl: FormControl; readonly emailControl: FormControl; private form; /** * Una casilla por opción de cada pregunta MULTI_SELECT, indexada * `"::"`. Viven fuera del `form` porque el valor que viaja * al backend es UNA lista por pregunta, no N booleanos: se arma al enviar. */ private readonly multiControls; constructor(); ngOnInit(): Promise; private buildForm; /** Preguntas ordenadas — el template las recorre en este orden. */ readonly questions: import("@angular/core").Signal; questionControl(name: string): FormControl; booleanControl(name: string): FormControl; optionControl(name: string, optionId: string): FormControl; /** Opciones tal como las escribió quien creó la encuesta — no se traducen. */ optionsOf(q: { options?: { id: string; name: string; order?: number; }[]; }): InputOption[]; /** * `val-radio-input` pide un `InputMetadata` completo (no `Partial`), así que * se arma acá en vez de en el template. */ radioProps(q: FieldSchemaDef): InputMetadata; placeholderOf(q: { placeholderText?: string; placeholder?: string; }): string; hintOf(q: { hintText?: string; hint?: string; }): string; /** * Tipo del `` para las preguntas que se responden escribiendo. Nada de * `parseInputType` de `FormSchemaBuilderService`: ese mapea al enum de * `val-form`, y acá no hay `val-form` de por medio (ver el comentario de * clase). Un tipo desconocido cae a texto, que siempre se puede responder. */ inputTypeOf(type: string): 'text' | 'email' | 'number' | 'tel'; /** Las opciones marcadas de una pregunta MULTI_SELECT, en el orden del schema. */ private selectedOptions; questionLabel(q: { label?: string; labelKey?: string; name: string; }): string; /** Puede responder sin sesión si el tipo lo permite; si no, hace falta login. */ readonly canRespond: import("@angular/core").Signal; /** * El tipo puede seguir exigiendo identidad al anónimo (`skipSubmitterIdentity` * ausente o false): es el caso de las solicitudes de Chesed/Okhelia, donde * saber quién pidió ES el punto. Una encuesta pone el flag en true y entonces * no se pide nada — si la organización necesita el correo de quien responde, * lo agrega como una PREGUNTA de tipo Correo. Eso es configuración de la * encuesta; el formulario no cobra peaje por su cuenta. */ needsIdentity(): boolean; readonly submitState: import("@angular/core").Signal<"ENABLED" | "WORKING">; submit(): Promise; readonly alreadyAnsweredState: import("@angular/core").Signal; readonly sentState: import("@angular/core").Signal; readonly loadErrorState: import("@angular/core").Signal; readonly loginRequiredState: import("@angular/core").Signal; t(key: string): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }