@arquimedes.co/eureka-forms 3.0.52-test → 3.0.54-new-steps
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@Types/AvailabilityFormStep.d.ts +48 -0
- package/dist/@Types/AvailabilityFormStep.js +24 -0
- package/dist/@Types/BankAccountFormStep.d.ts +67 -0
- package/dist/@Types/BankAccountFormStep.js +14 -0
- package/dist/@Types/BookingFormStep.d.ts +166 -0
- package/dist/@Types/BookingFormStep.js +44 -0
- package/dist/@Types/CalendarFormStep.d.ts +192 -0
- package/dist/@Types/CalendarFormStep.js +48 -0
- package/dist/@Types/CommunicationChannelFormStep.d.ts +51 -0
- package/dist/@Types/CommunicationChannelFormStep.js +15 -0
- package/dist/@Types/ConsentFormStep.d.ts +36 -0
- package/dist/@Types/ConsentFormStep.js +8 -0
- package/dist/@Types/EntityFormFormStep.d.ts +66 -0
- package/dist/@Types/EntityFormFormStep.js +20 -0
- package/dist/@Types/EventFormStep.d.ts +52 -0
- package/dist/@Types/EventFormStep.js +13 -0
- package/dist/@Types/ExternalReferenceFormStep.d.ts +74 -0
- package/dist/@Types/ExternalReferenceFormStep.js +20 -0
- package/dist/@Types/FormStep.d.ts +7 -2
- package/dist/@Types/FormStep.js +2 -1
- package/dist/@Types/LocationFormStep.d.ts +159 -0
- package/dist/@Types/LocationFormStep.js +46 -0
- package/dist/@Types/NumericFormSteps.d.ts +108 -0
- package/dist/@Types/NumericFormSteps.js +20 -0
- package/dist/@Types/PredefinedSelectorFormStep.d.ts +51 -0
- package/dist/@Types/PredefinedSelectorFormStep.js +39 -0
- package/dist/@Types/StepRef.d.ts +135 -0
- package/dist/@Types/StepRef.js +49 -0
- package/dist/FormSteps/BookingStep/BookingStep.d.ts +17 -0
- package/dist/FormSteps/BookingStep/BookingStep.js +14 -0
- package/dist/FormSteps/BookingStep/MaterialBookingStep/MaterialBookingStep.d.ts +7 -0
- package/dist/FormSteps/BookingStep/MaterialBookingStep/MaterialBookingStep.js +32 -0
- package/dist/FormSteps/CalendarStep/CalendarStep.d.ts +7 -0
- package/dist/FormSteps/CalendarStep/CalendarStep.js +14 -0
- package/dist/FormSteps/CalendarStep/MaterialCalendarStep/MaterialCalendarStep.d.ts +7 -0
- package/dist/FormSteps/CalendarStep/MaterialCalendarStep/MaterialCalendarStep.js +31 -0
- package/dist/FormSteps/LocationStep/LocationStep.d.ts +10 -0
- package/dist/FormSteps/LocationStep/LocationStep.js +14 -0
- package/dist/FormSteps/LocationStep/MaterialLocationStep/MaterialLocationStep.d.ts +3 -0
- package/dist/FormSteps/LocationStep/MaterialLocationStep/MaterialLocationStep.js +47 -0
- package/dist/FormSteps/LocationStep/MaterialLocationStep/MaterialLocationStep.module.css +18 -0
- package/dist/FormSteps/NumberStep/MaterialNumberStep/MaterialNumberStep.d.ts +3 -0
- package/dist/FormSteps/NumberStep/MaterialNumberStep/MaterialNumberStep.js +168 -0
- package/dist/FormSteps/NumberStep/MaterialNumberStep/MaterialNumberStep.module.css +94 -0
- package/dist/FormSteps/NumberStep/NumberStep.d.ts +10 -0
- package/dist/FormSteps/NumberStep/NumberStep.js +14 -0
- package/dist/FormSteps/Step.js +16 -0
- package/dist/FormSteps/StepFunctions.js +14 -0
- package/dist/FormSteps/StepFunctions.test.js +54 -0
- package/dist/Icons/AddIcon.d.ts +3 -0
- package/dist/Icons/AddIcon.js +7 -0
- package/dist/Icons/EditIcon.d.ts +3 -0
- package/dist/Icons/EditIcon.js +7 -0
- package/dist/Icons/RemoveIcon.d.ts +3 -0
- package/dist/Icons/RemoveIcon.js +7 -0
- package/dist/Icons/ViewDayIcon.d.ts +3 -0
- package/dist/Icons/ViewDayIcon.js +7 -0
- package/dist/Icons/ViewWeekIcon.d.ts +3 -0
- package/dist/Icons/ViewWeekIcon.js +7 -0
- package/dist/Shared/ErkAddressAutocomplete/ErkAddressAutocomplete.d.ts +19 -0
- package/dist/Shared/ErkAddressAutocomplete/ErkAddressAutocomplete.js +80 -0
- package/dist/Shared/ErkAddressAutocomplete/ErkAddressAutocomplete.module.css +82 -0
- package/dist/Shared/ErkAddressAutocomplete/googlePlaces.d.ts +29 -0
- package/dist/Shared/ErkAddressAutocomplete/googlePlaces.js +139 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.d.ts +31 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.js +223 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.module.css +608 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.d.ts +28 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.js +117 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.test.d.ts +1 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.test.js +49 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.test.d.ts +1 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.test.js +107 -0
- package/dist/Shared/ErkCalendar/CalendarFunctions.d.ts +28 -0
- package/dist/Shared/ErkCalendar/CalendarFunctions.js +121 -0
- package/dist/Shared/ErkCalendar/CalendarPopovers.d.ts +45 -0
- package/dist/Shared/ErkCalendar/CalendarPopovers.js +110 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.d.ts +73 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.js +281 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.module.css +785 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.test.d.ts +1 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.test.js +171 -0
- package/dist/Shared/ErkDatePicker/ErkDatePicker.js +1 -3
- package/dist/Shared/ErkDateRangePicker/ErkDateRangePicker.d.ts +2 -3
- package/dist/Shared/ErkDateRangePicker/ErkDateRangePicker.js +1 -2
- package/dist/Shared/ErkLocationField/ErkLocationField.d.ts +23 -0
- package/dist/Shared/ErkLocationField/ErkLocationField.js +73 -0
- package/dist/Shared/ErkLocationField/ErkLocationField.module.css +29 -0
- package/dist/Shared/ErkLocationField/addressFields.d.ts +12 -0
- package/dist/Shared/ErkLocationField/addressFields.js +34 -0
- package/dist/Shared/ErkLocationField/locationRestrictions.d.ts +6 -0
- package/dist/Shared/ErkLocationField/locationRestrictions.js +51 -0
- package/dist/Shared/ErkLocationInput/ErkLocationInput.d.ts +15 -0
- package/dist/Shared/ErkLocationInput/ErkLocationInput.js +502 -0
- package/dist/Shared/ErkLocationInput/ErkLocationInput.module.css +115 -0
- package/dist/Shared/ErkNumberField/ErkNumberField.d.ts +42 -0
- package/dist/Shared/ErkNumberField/ErkNumberField.js +170 -0
- package/dist/constants/FormStepTypes.d.ts +5 -1
- package/dist/constants/FormStepTypes.js +4 -0
- package/dist/index.lib.d.ts +4 -2
- package/dist/index.lib.js +3 -1
- package/package.json +2 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Renombrado a CalendarFormStep.
|
|
3
|
+
* Este archivo existe solo para compatibilidad retroactiva.
|
|
4
|
+
* Usar `CalendarFormStep.ts` directamente.
|
|
5
|
+
*/
|
|
6
|
+
export type { CalendarStep as AvailabilityStep } from './CalendarFormStep';
|
|
7
|
+
export type { CalendarValue as AvailabilityValue } from './CalendarFormStep';
|
|
8
|
+
export { CalendarEventCategory as AvailabilityEventCategory } from './CalendarFormStep';
|
|
9
|
+
export { CalendarDefaultView } from './CalendarFormStep';
|
|
10
|
+
export type { CalendarEventTemplate } from './CalendarFormStep';
|
|
11
|
+
export type { CalendarEvent } from './CalendarFormStep';
|
|
12
|
+
export declare enum AvailabilityMode {
|
|
13
|
+
WEEKLY = "WEEKLY",
|
|
14
|
+
SPECIFIC_DATES = "SPECIFIC_DATES",
|
|
15
|
+
COMBINED = "COMBINED"
|
|
16
|
+
}
|
|
17
|
+
export declare enum AvailabilityDayOfWeek {
|
|
18
|
+
MONDAY = 1,
|
|
19
|
+
TUESDAY = 2,
|
|
20
|
+
WEDNESDAY = 3,
|
|
21
|
+
THURSDAY = 4,
|
|
22
|
+
FRIDAY = 5,
|
|
23
|
+
SATURDAY = 6,
|
|
24
|
+
SUNDAY = 7
|
|
25
|
+
}
|
|
26
|
+
export interface AvailabilitySlot {
|
|
27
|
+
start: string;
|
|
28
|
+
end: string;
|
|
29
|
+
}
|
|
30
|
+
export interface AvailabilityDay {
|
|
31
|
+
day: AvailabilityDayOfWeek;
|
|
32
|
+
slots: AvailabilitySlot[];
|
|
33
|
+
recurrence?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface AvailabilitySpecificDate {
|
|
36
|
+
date: string;
|
|
37
|
+
slots: AvailabilitySlot[];
|
|
38
|
+
}
|
|
39
|
+
export interface AvailabilityExclusion {
|
|
40
|
+
date?: string;
|
|
41
|
+
dateRange?: {
|
|
42
|
+
start: string;
|
|
43
|
+
end: string;
|
|
44
|
+
};
|
|
45
|
+
dayOfWeek?: AvailabilityDayOfWeek;
|
|
46
|
+
slots?: AvailabilitySlot[];
|
|
47
|
+
reason?: string;
|
|
48
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Renombrado a CalendarFormStep.
|
|
3
|
+
* Este archivo existe solo para compatibilidad retroactiva.
|
|
4
|
+
* Usar `CalendarFormStep.ts` directamente.
|
|
5
|
+
*/
|
|
6
|
+
export { CalendarEventCategory as AvailabilityEventCategory } from './CalendarFormStep';
|
|
7
|
+
export { CalendarDefaultView } from './CalendarFormStep';
|
|
8
|
+
// Tipos del draft original mantenidos para no romper código existente.
|
|
9
|
+
export var AvailabilityMode;
|
|
10
|
+
(function (AvailabilityMode) {
|
|
11
|
+
AvailabilityMode["WEEKLY"] = "WEEKLY";
|
|
12
|
+
AvailabilityMode["SPECIFIC_DATES"] = "SPECIFIC_DATES";
|
|
13
|
+
AvailabilityMode["COMBINED"] = "COMBINED";
|
|
14
|
+
})(AvailabilityMode || (AvailabilityMode = {}));
|
|
15
|
+
export var AvailabilityDayOfWeek;
|
|
16
|
+
(function (AvailabilityDayOfWeek) {
|
|
17
|
+
AvailabilityDayOfWeek[AvailabilityDayOfWeek["MONDAY"] = 1] = "MONDAY";
|
|
18
|
+
AvailabilityDayOfWeek[AvailabilityDayOfWeek["TUESDAY"] = 2] = "TUESDAY";
|
|
19
|
+
AvailabilityDayOfWeek[AvailabilityDayOfWeek["WEDNESDAY"] = 3] = "WEDNESDAY";
|
|
20
|
+
AvailabilityDayOfWeek[AvailabilityDayOfWeek["THURSDAY"] = 4] = "THURSDAY";
|
|
21
|
+
AvailabilityDayOfWeek[AvailabilityDayOfWeek["FRIDAY"] = 5] = "FRIDAY";
|
|
22
|
+
AvailabilityDayOfWeek[AvailabilityDayOfWeek["SATURDAY"] = 6] = "SATURDAY";
|
|
23
|
+
AvailabilityDayOfWeek[AvailabilityDayOfWeek["SUNDAY"] = 7] = "SUNDAY";
|
|
24
|
+
})(AvailabilityDayOfWeek || (AvailabilityDayOfWeek = {}));
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — BankAccountFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar información de una cuenta bancaria.
|
|
5
|
+
* Incluye banco, tipo de cuenta, número, país, moneda y titular opcional.
|
|
6
|
+
*/
|
|
7
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
8
|
+
export declare enum BankAccountType {
|
|
9
|
+
SAVINGS = "SAVINGS",
|
|
10
|
+
CHECKING = "CHECKING"
|
|
11
|
+
}
|
|
12
|
+
export interface BankAccountStep extends GBaseStep {
|
|
13
|
+
type: 'BANK_ACCOUNT';
|
|
14
|
+
label: string;
|
|
15
|
+
description: string | null;
|
|
16
|
+
required: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* País predeterminado para filtrar la lista de bancos.
|
|
19
|
+
* Código ISO 3166-1 alpha-2 (ej: "CO", "US", "MX").
|
|
20
|
+
* El usuario puede cambiarlo si no se restringe.
|
|
21
|
+
*/
|
|
22
|
+
defaultCountry?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Si se define, solo se muestran bancos de estos países.
|
|
25
|
+
* Si no se define, se permite cualquier país.
|
|
26
|
+
*/
|
|
27
|
+
allowedCountries?: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Si se define, solo se muestran estas monedas.
|
|
30
|
+
* Códigos ISO 4217 (ej: ["COP", "USD"]).
|
|
31
|
+
*/
|
|
32
|
+
allowedCurrencies?: string[];
|
|
33
|
+
/**
|
|
34
|
+
* Si true, se solicita información del titular de la cuenta
|
|
35
|
+
* (nombre / identificación).
|
|
36
|
+
*/
|
|
37
|
+
requireHolder: boolean;
|
|
38
|
+
size: 1 | 2 | 3 | 4;
|
|
39
|
+
}
|
|
40
|
+
export interface BankAccountHolder {
|
|
41
|
+
/** Nombre completo del titular */
|
|
42
|
+
name?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Referencia a un registro de identidad en Capta.
|
|
45
|
+
* Puede ser el id del contacto o el número de documento.
|
|
46
|
+
*/
|
|
47
|
+
identityRef?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface BankValue {
|
|
50
|
+
bank: {
|
|
51
|
+
/** Id interno del banco en el catálogo de Capta */
|
|
52
|
+
id: string;
|
|
53
|
+
/** Nombre display del banco */
|
|
54
|
+
label: string;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Tipo de cuenta. Se acepta string para bancos con tipos no estándar
|
|
58
|
+
* (ej: "NEQUI", "DAVIPLATA", "CORRIENTE_EXTERIOR").
|
|
59
|
+
*/
|
|
60
|
+
accountType: BankAccountType | string;
|
|
61
|
+
accountNumber: string;
|
|
62
|
+
/** Código ISO 3166-1 alpha-2 del país */
|
|
63
|
+
country: string;
|
|
64
|
+
/** Código ISO 4217 de la moneda */
|
|
65
|
+
currency: string;
|
|
66
|
+
holder?: BankAccountHolder;
|
|
67
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — BankAccountFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar información de una cuenta bancaria.
|
|
5
|
+
* Incluye banco, tipo de cuenta, número, país, moneda y titular opcional.
|
|
6
|
+
*/
|
|
7
|
+
// ===========================================================================
|
|
8
|
+
// Enums
|
|
9
|
+
// ===========================================================================
|
|
10
|
+
export var BankAccountType;
|
|
11
|
+
(function (BankAccountType) {
|
|
12
|
+
BankAccountType["SAVINGS"] = "SAVINGS";
|
|
13
|
+
BankAccountType["CHECKING"] = "CHECKING";
|
|
14
|
+
})(BankAccountType || (BankAccountType = {}));
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BookingFormStep — paso de agendamiento (flujo ligero).
|
|
3
|
+
*
|
|
4
|
+
* Permite que alguien externo agende en el calendario de una o varias personas.
|
|
5
|
+
* Flujo: (seleccionar persona) → seleccionar día → seleccionar hora.
|
|
6
|
+
*
|
|
7
|
+
* A diferencia del paso CALENDAR, este NO usa MUI X Scheduler:
|
|
8
|
+
* presenta una UI ligera de date-picker + lista de slots disponibles.
|
|
9
|
+
* La disponibilidad real la calcula el backend leyendo los calendarios referenciados.
|
|
10
|
+
*/
|
|
11
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
12
|
+
import FormStepTypes from '../constants/FormStepTypes';
|
|
13
|
+
import { DynamicRef } from './StepRef';
|
|
14
|
+
import { CalendarValue } from './CalendarFormStep';
|
|
15
|
+
/**
|
|
16
|
+
* Modalidad de la cita.
|
|
17
|
+
*/
|
|
18
|
+
export declare enum BookingMode {
|
|
19
|
+
/** Presencial — requiere ubicación física. */
|
|
20
|
+
IN_PERSON = "IN_PERSON",
|
|
21
|
+
/** Virtual / remota (Meet, Teams, Zoom, etc.). */
|
|
22
|
+
VIRTUAL = "VIRTUAL",
|
|
23
|
+
/** Híbrida — se acuerda entre las partes. */
|
|
24
|
+
HYBRID = "HYBRID"
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Cómo se maneja la selección de la persona a agendar.
|
|
28
|
+
*/
|
|
29
|
+
export declare enum PersonSelectionMode {
|
|
30
|
+
/**
|
|
31
|
+
* Un único calendario destino, sin selector de persona visible.
|
|
32
|
+
* El backend asigna automáticamente el slot disponible.
|
|
33
|
+
*/
|
|
34
|
+
NONE = "NONE",
|
|
35
|
+
/**
|
|
36
|
+
* El usuario puede elegir una persona específica o dejar que el sistema asigne.
|
|
37
|
+
*/
|
|
38
|
+
OPTIONAL = "OPTIONAL",
|
|
39
|
+
/**
|
|
40
|
+
* El usuario debe elegir una persona antes de ver los horarios disponibles.
|
|
41
|
+
*/
|
|
42
|
+
REQUIRED = "REQUIRED"
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Perfil de una persona cuyo calendario se puede agendar.
|
|
46
|
+
*/
|
|
47
|
+
export interface BookablePerson {
|
|
48
|
+
/** Identificador único de la persona en el sistema. */
|
|
49
|
+
id: string;
|
|
50
|
+
/** Nombre visible en la UI de selección. */
|
|
51
|
+
name: string;
|
|
52
|
+
/** URL del avatar / foto de perfil. */
|
|
53
|
+
avatarUrl?: string;
|
|
54
|
+
/** Rol o cargo visible al usuario (ej: "Técnico", "Asesor comercial"). */
|
|
55
|
+
role?: string;
|
|
56
|
+
/** Descripción breve opcional. */
|
|
57
|
+
description?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Paso de tipo `BOOKING`.
|
|
61
|
+
* UI ligera: persona → día → slot de hora.
|
|
62
|
+
*/
|
|
63
|
+
export interface BookingStep extends GBaseStep {
|
|
64
|
+
type: FormStepTypes.BOOKING;
|
|
65
|
+
label: string;
|
|
66
|
+
description: string | null;
|
|
67
|
+
required: boolean;
|
|
68
|
+
/** Modalidad de la cita (presencial, virtual, híbrida). */
|
|
69
|
+
bookingMode: BookingMode;
|
|
70
|
+
/**
|
|
71
|
+
* Cómo se presenta la selección de persona al usuario.
|
|
72
|
+
* @default PersonSelectionMode.NONE
|
|
73
|
+
*/
|
|
74
|
+
personSelectionMode?: PersonSelectionMode;
|
|
75
|
+
/**
|
|
76
|
+
* Lista de personas agendables.
|
|
77
|
+
* Requerido si `personSelectionMode` es `OPTIONAL` o `REQUIRED`.
|
|
78
|
+
*/
|
|
79
|
+
persons?: BookablePerson[];
|
|
80
|
+
/**
|
|
81
|
+
* Permite que el formulario sea enviado sin identificar al usuario (agendamiento anónimo).
|
|
82
|
+
* El backend genera un token temporal para rastrear la reserva.
|
|
83
|
+
* @default false
|
|
84
|
+
*/
|
|
85
|
+
allowAnonymous?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Si el paso recopila datos de contacto (nombre/correo) del que agenda.
|
|
88
|
+
* Desactívalo cuando el booking va dentro de un formulario mayor que ya los captura.
|
|
89
|
+
* @default false
|
|
90
|
+
*/
|
|
91
|
+
collectContact?: boolean;
|
|
92
|
+
/** Duración en minutos de cada slot de cita. */
|
|
93
|
+
durationMinutes: number;
|
|
94
|
+
/**
|
|
95
|
+
* Buffer en minutos entre citas consecutivas.
|
|
96
|
+
* @default 0
|
|
97
|
+
*/
|
|
98
|
+
bufferMinutes?: number;
|
|
99
|
+
/**
|
|
100
|
+
* Mínimo de horas de anticipación para agendar (ej: no se puede agendar con menos de 2h).
|
|
101
|
+
* @default 0
|
|
102
|
+
*/
|
|
103
|
+
minNoticeHours?: number;
|
|
104
|
+
/**
|
|
105
|
+
* Máximo de días hacia el futuro en los que se pueden ver slots disponibles.
|
|
106
|
+
* @default 30
|
|
107
|
+
*/
|
|
108
|
+
maxAdvanceDays?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Minutos que se bloquea el slot mientras el usuario termina el formulario.
|
|
111
|
+
* Si no confirma a tiempo, el slot vuelve a estar disponible.
|
|
112
|
+
* @default 15
|
|
113
|
+
*/
|
|
114
|
+
temporaryLockMinutes?: number;
|
|
115
|
+
/**
|
|
116
|
+
* Referencia a un paso `CALENDAR` en el mismo formulario cuya disponibilidad
|
|
117
|
+
* se usa para filtrar los slots. Útil cuando el dueño del calendario también
|
|
118
|
+
* llena el formulario y define su disponibilidad en el mismo flujo.
|
|
119
|
+
*/
|
|
120
|
+
calendarRef?: DynamicRef<CalendarValue, 'CALENDAR'>;
|
|
121
|
+
size: 1 | 2 | 3 | 4;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Un slot de tiempo disponible para agendamiento.
|
|
125
|
+
* El backend calcula esto cruzando el calendario del profesional con el horario configurado.
|
|
126
|
+
*/
|
|
127
|
+
export interface BookingSlot {
|
|
128
|
+
/** ID único del slot (puede incluir personId, fecha y hora). */
|
|
129
|
+
id: string;
|
|
130
|
+
/** Hora de inicio en formato 24h `HH:mm`. */
|
|
131
|
+
startTime: string;
|
|
132
|
+
/** Hora de fin en formato 24h `HH:mm`. */
|
|
133
|
+
endTime: string;
|
|
134
|
+
/** Si el slot sigue disponible para ser reservado. */
|
|
135
|
+
available: boolean;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Valor que se guarda tras completar un paso de tipo `BOOKING`.
|
|
139
|
+
*/
|
|
140
|
+
export interface BookingValue {
|
|
141
|
+
type: 'BOOKING_VALUE';
|
|
142
|
+
/** ID generado por el backend al bloquear el slot. */
|
|
143
|
+
slotId?: string;
|
|
144
|
+
/** Fecha de la cita en formato ISO `YYYY-MM-DD`. */
|
|
145
|
+
date: string;
|
|
146
|
+
/** Hora de inicio en formato 24h `HH:mm`. */
|
|
147
|
+
startTime: string;
|
|
148
|
+
/** Hora de fin en formato 24h `HH:mm`. */
|
|
149
|
+
endTime: string;
|
|
150
|
+
/** ID de la persona seleccionada o asignada. */
|
|
151
|
+
personId?: string;
|
|
152
|
+
/** Nombre de la persona (incluido si `personSelectionMode !== NONE`). */
|
|
153
|
+
personName?: string;
|
|
154
|
+
/** Nombre de contacto del que agenda (solo si `collectContact`). */
|
|
155
|
+
contactName?: string;
|
|
156
|
+
/** Correo de contacto del que agenda (solo si `collectContact`). */
|
|
157
|
+
contactEmail?: string;
|
|
158
|
+
/**
|
|
159
|
+
* Estado del slot en el ciclo de vida del formulario.
|
|
160
|
+
* - `PENDING`: bloqueado temporalmente, formulario sin enviar.
|
|
161
|
+
* - `CONFIRMED`: reserva en firme, formulario enviado.
|
|
162
|
+
*/
|
|
163
|
+
status: 'PENDING' | 'CONFIRMED';
|
|
164
|
+
/** Timestamp ISO hasta el que está bloqueado el slot (cuando `status === 'PENDING'`). */
|
|
165
|
+
lockedUntil?: string;
|
|
166
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BookingFormStep — paso de agendamiento (flujo ligero).
|
|
3
|
+
*
|
|
4
|
+
* Permite que alguien externo agende en el calendario de una o varias personas.
|
|
5
|
+
* Flujo: (seleccionar persona) → seleccionar día → seleccionar hora.
|
|
6
|
+
*
|
|
7
|
+
* A diferencia del paso CALENDAR, este NO usa MUI X Scheduler:
|
|
8
|
+
* presenta una UI ligera de date-picker + lista de slots disponibles.
|
|
9
|
+
* La disponibilidad real la calcula el backend leyendo los calendarios referenciados.
|
|
10
|
+
*/
|
|
11
|
+
// ===========================================================================
|
|
12
|
+
// Enums
|
|
13
|
+
// ===========================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Modalidad de la cita.
|
|
16
|
+
*/
|
|
17
|
+
export var BookingMode;
|
|
18
|
+
(function (BookingMode) {
|
|
19
|
+
/** Presencial — requiere ubicación física. */
|
|
20
|
+
BookingMode["IN_PERSON"] = "IN_PERSON";
|
|
21
|
+
/** Virtual / remota (Meet, Teams, Zoom, etc.). */
|
|
22
|
+
BookingMode["VIRTUAL"] = "VIRTUAL";
|
|
23
|
+
/** Híbrida — se acuerda entre las partes. */
|
|
24
|
+
BookingMode["HYBRID"] = "HYBRID";
|
|
25
|
+
})(BookingMode || (BookingMode = {}));
|
|
26
|
+
/**
|
|
27
|
+
* Cómo se maneja la selección de la persona a agendar.
|
|
28
|
+
*/
|
|
29
|
+
export var PersonSelectionMode;
|
|
30
|
+
(function (PersonSelectionMode) {
|
|
31
|
+
/**
|
|
32
|
+
* Un único calendario destino, sin selector de persona visible.
|
|
33
|
+
* El backend asigna automáticamente el slot disponible.
|
|
34
|
+
*/
|
|
35
|
+
PersonSelectionMode["NONE"] = "NONE";
|
|
36
|
+
/**
|
|
37
|
+
* El usuario puede elegir una persona específica o dejar que el sistema asigne.
|
|
38
|
+
*/
|
|
39
|
+
PersonSelectionMode["OPTIONAL"] = "OPTIONAL";
|
|
40
|
+
/**
|
|
41
|
+
* El usuario debe elegir una persona antes de ver los horarios disponibles.
|
|
42
|
+
*/
|
|
43
|
+
PersonSelectionMode["REQUIRED"] = "REQUIRED";
|
|
44
|
+
})(PersonSelectionMode || (PersonSelectionMode = {}));
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CalendarFormStep — paso de calendario completo (powered by MUI X Scheduler).
|
|
3
|
+
*
|
|
4
|
+
* Permite al usuario (el dueño del formulario o quien lo responde) gestionar
|
|
5
|
+
* su calendario: definir horarios de trabajo, crear eventos nombrados, marcar
|
|
6
|
+
* bloques de disponibilidad por modalidad, bloquear horas y más.
|
|
7
|
+
*
|
|
8
|
+
* Renombrado desde `AvailabilityFormStep`. El archivo anterior re-exporta
|
|
9
|
+
* desde aquí por compatibilidad retroactiva.
|
|
10
|
+
*/
|
|
11
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
12
|
+
import FormStepTypes from '../constants/FormStepTypes';
|
|
13
|
+
/**
|
|
14
|
+
* Categoría de un bloque en el calendario.
|
|
15
|
+
* Determina el significado y la lógica de disponibilidad de cada evento.
|
|
16
|
+
*/
|
|
17
|
+
export declare enum CalendarEventCategory {
|
|
18
|
+
/** Horario laboral general — "estoy trabajando". */
|
|
19
|
+
WORKING = "WORKING",
|
|
20
|
+
/** Disponibilidad solo presencial (física). */
|
|
21
|
+
PHYSICAL = "PHYSICAL",
|
|
22
|
+
/** Disponibilidad solo virtual / remota. */
|
|
23
|
+
VIRTUAL = "VIRTUAL",
|
|
24
|
+
/**
|
|
25
|
+
* Disponible para un tipo específico de atención o actividad
|
|
26
|
+
* (ej: "solo para soporte técnico", "reuniones de ventas").
|
|
27
|
+
* Se define con un `eventTemplateId`.
|
|
28
|
+
*/
|
|
29
|
+
SPECIFIC = "SPECIFIC",
|
|
30
|
+
/** Reunión o evento con nombre propio (ej: "Standup", "Visita cliente"). */
|
|
31
|
+
MEETING = "MEETING",
|
|
32
|
+
/** Bloqueado — no disponible para agendamiento externo ni interno. */
|
|
33
|
+
BUSY = "BUSY",
|
|
34
|
+
/** Tipo personalizado definido por el configurador del formulario. */
|
|
35
|
+
CUSTOM = "CUSTOM"
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Vista inicial que mostrará el scheduler al renderizarse.
|
|
39
|
+
*/
|
|
40
|
+
export declare enum CalendarDefaultView {
|
|
41
|
+
DAY = "day",
|
|
42
|
+
WEEK = "week",
|
|
43
|
+
MONTH = "month",
|
|
44
|
+
AGENDA = "agenda"
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Plantilla de tipo de evento que el usuario puede seleccionar al crear un bloque.
|
|
48
|
+
* Equivale a las "categorías de evento" visibles en la UI del scheduler.
|
|
49
|
+
*/
|
|
50
|
+
export interface CalendarEventTemplate {
|
|
51
|
+
/** Identificador único de la plantilla. */
|
|
52
|
+
id: string;
|
|
53
|
+
/** Nombre visible en la UI (ej: "Atención presencial", "Reunión de equipo"). */
|
|
54
|
+
name: string;
|
|
55
|
+
/** Categoría base que determina el comportamiento de disponibilidad. */
|
|
56
|
+
category: CalendarEventCategory;
|
|
57
|
+
/**
|
|
58
|
+
* Color en hex o nombre CSS para identificar visualmente el bloque.
|
|
59
|
+
* @example "#4CAF50"
|
|
60
|
+
*/
|
|
61
|
+
color?: string;
|
|
62
|
+
/** Duración por defecto en minutos al crear un bloque de este tipo. */
|
|
63
|
+
defaultDurationMinutes?: number;
|
|
64
|
+
/**
|
|
65
|
+
* Si `true`, slots de este tipo quedarán disponibles para ser agendados
|
|
66
|
+
* desde un paso `BOOKING` que referencie este calendario.
|
|
67
|
+
*/
|
|
68
|
+
bookable?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Número máximo de personas que pueden agendar simultáneamente en el mismo slot.
|
|
71
|
+
* Solo aplica si `bookable: true`.
|
|
72
|
+
* @default 1
|
|
73
|
+
*/
|
|
74
|
+
maxConcurrentBookings?: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Paso de tipo `CALENDAR`.
|
|
78
|
+
* Renderiza un MUI X Scheduler completo donde el usuario gestiona su agenda.
|
|
79
|
+
*/
|
|
80
|
+
export interface CalendarStep extends GBaseStep {
|
|
81
|
+
type: FormStepTypes.CALENDAR;
|
|
82
|
+
label: string;
|
|
83
|
+
description: string | null;
|
|
84
|
+
required: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Vista inicial del scheduler.
|
|
87
|
+
* @default CalendarDefaultView.WEEK
|
|
88
|
+
*/
|
|
89
|
+
defaultView?: CalendarDefaultView;
|
|
90
|
+
/**
|
|
91
|
+
* Vistas habilitadas en el scheduler (el usuario puede cambiar entre ellas).
|
|
92
|
+
* @default ['day', 'week', 'month']
|
|
93
|
+
*/
|
|
94
|
+
enabledViews?: CalendarDefaultView[];
|
|
95
|
+
/**
|
|
96
|
+
* Categorías de evento que el usuario puede crear.
|
|
97
|
+
* Si está vacío o undefined, se permiten todas.
|
|
98
|
+
*/
|
|
99
|
+
allowedCategories?: CalendarEventCategory[];
|
|
100
|
+
/**
|
|
101
|
+
* Plantillas de evento configuradas por el creador del formulario.
|
|
102
|
+
* Aparecen como opciones en el selector al crear un bloque.
|
|
103
|
+
* Si está vacío, el usuario solo ve las categorías base.
|
|
104
|
+
*/
|
|
105
|
+
eventTemplates?: CalendarEventTemplate[];
|
|
106
|
+
/**
|
|
107
|
+
* Muestra o no los fines de semana en las vistas de día/semana.
|
|
108
|
+
* @default true
|
|
109
|
+
*/
|
|
110
|
+
showWeekends?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Hora mínima visible en las vistas de día/semana (formato HH:mm 24h).
|
|
113
|
+
* @default "00:00"
|
|
114
|
+
* @example "07:00"
|
|
115
|
+
*/
|
|
116
|
+
minTime?: string;
|
|
117
|
+
/**
|
|
118
|
+
* Hora máxima visible en las vistas de día/semana (formato HH:mm 24h).
|
|
119
|
+
* @default "23:59"
|
|
120
|
+
* @example "22:00"
|
|
121
|
+
*/
|
|
122
|
+
maxTime?: string;
|
|
123
|
+
/**
|
|
124
|
+
* Permite crear eventos con recurrencia semanal/mensual.
|
|
125
|
+
* @default true
|
|
126
|
+
*/
|
|
127
|
+
allowRecurring?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Permite crear eventos que duran todo el día.
|
|
130
|
+
* @default true
|
|
131
|
+
*/
|
|
132
|
+
allowAllDay?: boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Zona horaria del calendario. Si no se define, se usa la del navegador.
|
|
135
|
+
* @example "America/Bogota"
|
|
136
|
+
*/
|
|
137
|
+
timezone?: string;
|
|
138
|
+
size: 1 | 2 | 3 | 4;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Un evento / bloque individual guardado en el calendario.
|
|
142
|
+
*
|
|
143
|
+
* El formato de `start` y `end` es compatible con `SchedulerEvent` de MUI X Scheduler,
|
|
144
|
+
* por lo que el valor puede pasarse directamente a `<EventCalendar events={...} />`
|
|
145
|
+
* sin conversión.
|
|
146
|
+
*/
|
|
147
|
+
export interface CalendarEvent {
|
|
148
|
+
/** ID único del evento (generado en el cliente al crearlo). */
|
|
149
|
+
id: string;
|
|
150
|
+
/** Nombre visible del evento. Requerido para categorías MEETING y CUSTOM. */
|
|
151
|
+
title?: string;
|
|
152
|
+
/** Categoría del bloque. */
|
|
153
|
+
category: CalendarEventCategory;
|
|
154
|
+
/** ID de la plantilla usada al crear el bloque (si aplica). */
|
|
155
|
+
eventTemplateId?: string;
|
|
156
|
+
/**
|
|
157
|
+
* Inicio del evento en formato ISO 8601 (`YYYY-MM-DDTHH:mm:ss`).
|
|
158
|
+
* Coincide con el campo `start` de `SchedulerEvent` de MUI X Scheduler.
|
|
159
|
+
* @example "2024-06-19T09:00:00"
|
|
160
|
+
*/
|
|
161
|
+
start: string;
|
|
162
|
+
/**
|
|
163
|
+
* Fin del evento en formato ISO 8601 (`YYYY-MM-DDTHH:mm:ss`).
|
|
164
|
+
* Coincide con el campo `end` de `SchedulerEvent` de MUI X Scheduler.
|
|
165
|
+
* @example "2024-06-19T10:30:00"
|
|
166
|
+
*/
|
|
167
|
+
end: string;
|
|
168
|
+
/** Evento de día completo (start/end solo necesitan la parte de fecha). */
|
|
169
|
+
isAllDay?: boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Regla de recurrencia en formato RRULE (RFC 5545).
|
|
172
|
+
* @example "FREQ=WEEKLY;BYDAY=MO,WE,FR"
|
|
173
|
+
* @example "FREQ=WEEKLY;INTERVAL=2"
|
|
174
|
+
*/
|
|
175
|
+
recurrence?: string;
|
|
176
|
+
/** Notas opcionales del evento. */
|
|
177
|
+
notes?: string;
|
|
178
|
+
/** Color override para este evento específico (en hex). */
|
|
179
|
+
color?: string;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Valor completo devuelto por un paso de tipo `CALENDAR`.
|
|
183
|
+
*/
|
|
184
|
+
export interface CalendarValue {
|
|
185
|
+
type: 'CALENDAR_VALUE';
|
|
186
|
+
/** Lista de todos los bloques/eventos del calendario. */
|
|
187
|
+
events: CalendarEvent[];
|
|
188
|
+
/** Zona horaria en la que se capturaron los datos. */
|
|
189
|
+
timezone?: string;
|
|
190
|
+
}
|
|
191
|
+
export type { CalendarStep as AvailabilityStep };
|
|
192
|
+
export type { CalendarValue as AvailabilityValue };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CalendarFormStep — paso de calendario completo (powered by MUI X Scheduler).
|
|
3
|
+
*
|
|
4
|
+
* Permite al usuario (el dueño del formulario o quien lo responde) gestionar
|
|
5
|
+
* su calendario: definir horarios de trabajo, crear eventos nombrados, marcar
|
|
6
|
+
* bloques de disponibilidad por modalidad, bloquear horas y más.
|
|
7
|
+
*
|
|
8
|
+
* Renombrado desde `AvailabilityFormStep`. El archivo anterior re-exporta
|
|
9
|
+
* desde aquí por compatibilidad retroactiva.
|
|
10
|
+
*/
|
|
11
|
+
// ===========================================================================
|
|
12
|
+
// Enums
|
|
13
|
+
// ===========================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Categoría de un bloque en el calendario.
|
|
16
|
+
* Determina el significado y la lógica de disponibilidad de cada evento.
|
|
17
|
+
*/
|
|
18
|
+
export var CalendarEventCategory;
|
|
19
|
+
(function (CalendarEventCategory) {
|
|
20
|
+
/** Horario laboral general — "estoy trabajando". */
|
|
21
|
+
CalendarEventCategory["WORKING"] = "WORKING";
|
|
22
|
+
/** Disponibilidad solo presencial (física). */
|
|
23
|
+
CalendarEventCategory["PHYSICAL"] = "PHYSICAL";
|
|
24
|
+
/** Disponibilidad solo virtual / remota. */
|
|
25
|
+
CalendarEventCategory["VIRTUAL"] = "VIRTUAL";
|
|
26
|
+
/**
|
|
27
|
+
* Disponible para un tipo específico de atención o actividad
|
|
28
|
+
* (ej: "solo para soporte técnico", "reuniones de ventas").
|
|
29
|
+
* Se define con un `eventTemplateId`.
|
|
30
|
+
*/
|
|
31
|
+
CalendarEventCategory["SPECIFIC"] = "SPECIFIC";
|
|
32
|
+
/** Reunión o evento con nombre propio (ej: "Standup", "Visita cliente"). */
|
|
33
|
+
CalendarEventCategory["MEETING"] = "MEETING";
|
|
34
|
+
/** Bloqueado — no disponible para agendamiento externo ni interno. */
|
|
35
|
+
CalendarEventCategory["BUSY"] = "BUSY";
|
|
36
|
+
/** Tipo personalizado definido por el configurador del formulario. */
|
|
37
|
+
CalendarEventCategory["CUSTOM"] = "CUSTOM";
|
|
38
|
+
})(CalendarEventCategory || (CalendarEventCategory = {}));
|
|
39
|
+
/**
|
|
40
|
+
* Vista inicial que mostrará el scheduler al renderizarse.
|
|
41
|
+
*/
|
|
42
|
+
export var CalendarDefaultView;
|
|
43
|
+
(function (CalendarDefaultView) {
|
|
44
|
+
CalendarDefaultView["DAY"] = "day";
|
|
45
|
+
CalendarDefaultView["WEEK"] = "week";
|
|
46
|
+
CalendarDefaultView["MONTH"] = "month";
|
|
47
|
+
CalendarDefaultView["AGENDA"] = "agenda";
|
|
48
|
+
})(CalendarDefaultView || (CalendarDefaultView = {}));
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — CommunicationChannelFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar uno o más canales de comunicación (WhatsApp / Email / Teléfono).
|
|
5
|
+
* Cada canal es un objeto con tipo + valor + estado de verificación opcional.
|
|
6
|
+
*/
|
|
7
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
8
|
+
export declare enum CommunicationChannelType {
|
|
9
|
+
WHATSAPP = "WHATSAPP",
|
|
10
|
+
EMAIL = "EMAIL",
|
|
11
|
+
PHONE = "PHONE"
|
|
12
|
+
}
|
|
13
|
+
export interface CommunicationChannelStep extends GBaseStep {
|
|
14
|
+
type: 'COMMUNICATION_CHANNEL';
|
|
15
|
+
label: string;
|
|
16
|
+
description: string | null;
|
|
17
|
+
required: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Canales que el usuario puede seleccionar.
|
|
20
|
+
* Si solo hay uno, no se muestra el selector de tipo.
|
|
21
|
+
*/
|
|
22
|
+
allowedChannels: [CommunicationChannelType, ...CommunicationChannelType[]];
|
|
23
|
+
/**
|
|
24
|
+
* Si true, se muestra un campo/estado "verificado" junto al valor.
|
|
25
|
+
* Útil para marcar si el canal fue confirmado (doble opt-in, OTP, etc.).
|
|
26
|
+
*/
|
|
27
|
+
includeVerification: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Si true, el usuario puede agregar más de un canal.
|
|
30
|
+
* El valor guardado pasa de ser un objeto a un array.
|
|
31
|
+
*/
|
|
32
|
+
allowMultiple: boolean;
|
|
33
|
+
/** Solo aplica si allowMultiple === true */
|
|
34
|
+
maxChannels?: number;
|
|
35
|
+
size: 1 | 2 | 3 | 4;
|
|
36
|
+
}
|
|
37
|
+
export interface CommunicationChannelValue {
|
|
38
|
+
channelType: CommunicationChannelType;
|
|
39
|
+
/** Número de teléfono (con código de país) o dirección de email */
|
|
40
|
+
value: string;
|
|
41
|
+
/**
|
|
42
|
+
* Presente solo si el paso tiene includeVerification === true.
|
|
43
|
+
* true = verificado, false = pendiente de verificación.
|
|
44
|
+
*/
|
|
45
|
+
verified?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Si allowMultiple === false → CommunicationChannelValue
|
|
49
|
+
* Si allowMultiple === true → CommunicationChannelValue[]
|
|
50
|
+
*/
|
|
51
|
+
export type CommunicationChannelStepValue = CommunicationChannelValue | CommunicationChannelValue[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — CommunicationChannelFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar uno o más canales de comunicación (WhatsApp / Email / Teléfono).
|
|
5
|
+
* Cada canal es un objeto con tipo + valor + estado de verificación opcional.
|
|
6
|
+
*/
|
|
7
|
+
// ===========================================================================
|
|
8
|
+
// Enum de canales (refleja ChannelTypes de Eureka-Types)
|
|
9
|
+
// ===========================================================================
|
|
10
|
+
export var CommunicationChannelType;
|
|
11
|
+
(function (CommunicationChannelType) {
|
|
12
|
+
CommunicationChannelType["WHATSAPP"] = "WHATSAPP";
|
|
13
|
+
CommunicationChannelType["EMAIL"] = "EMAIL";
|
|
14
|
+
CommunicationChannelType["PHONE"] = "PHONE";
|
|
15
|
+
})(CommunicationChannelType || (CommunicationChannelType = {}));
|