datakeen-session-react 1.1.140-dev.24 → 1.1.140-dev.26

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.
Files changed (28) hide show
  1. package/README.md +487 -135
  2. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js +1 -1
  3. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +1 -1
  4. package/dist/cjs/components/session/UserInputForm/IdentityFields.js +1 -1
  5. package/dist/cjs/components/session/UserInputForm/IdentityFields.js.map +1 -1
  6. package/dist/cjs/components/signature-electronic/DocusealSignature.js +2 -1
  7. package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +1 -1
  8. package/dist/cjs/hooks/useStepNavigation.js +25 -3
  9. package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
  10. package/dist/cjs/hooks/useUserInputForm.js +3 -2
  11. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  12. package/dist/cjs/services/sessionService.js +36 -0
  13. package/dist/cjs/services/sessionService.js.map +1 -1
  14. package/dist/esm/components/session/UserInputForm/CustomFormFields.js +1 -1
  15. package/dist/esm/components/session/UserInputForm/CustomFormFields.js.map +1 -1
  16. package/dist/esm/components/session/UserInputForm/IdentityFields.js +1 -1
  17. package/dist/esm/components/session/UserInputForm/IdentityFields.js.map +1 -1
  18. package/dist/esm/components/signature-electronic/DocusealSignature.js +2 -1
  19. package/dist/esm/components/signature-electronic/DocusealSignature.js.map +1 -1
  20. package/dist/esm/hooks/useStepNavigation.js +26 -4
  21. package/dist/esm/hooks/useStepNavigation.js.map +1 -1
  22. package/dist/esm/hooks/useUserInputForm.js +3 -2
  23. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  24. package/dist/esm/services/sessionService.js +36 -1
  25. package/dist/esm/services/sessionService.js.map +1 -1
  26. package/docs/README.md +6 -0
  27. package/docs/navigation-history.md +138 -0
  28. package/package.json +1 -1
@@ -102,7 +102,7 @@ var CustomFormFields = function (_a) {
102
102
  var dateString = "".concat(newDay, "-").concat(newMonth, "-").concat(newYear);
103
103
  onFieldChange(field.id, dateString);
104
104
  };
105
- return (jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsxRuntime.jsx(SelectComponent.Select, { options: userInputForm.DAY_OPTIONS, value: day, onValueChange: function (val) { return handleDateChange_1("day", val); }, placeholder: "DD", error: hasError, allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 2 }), jsxRuntime.jsx(SelectComponent.Select, { options: MONTH_OPTIONS_WITH_NUMERIC_LABEL, value: month, onValueChange: function (val) { return handleDateChange_1("month", val); }, placeholder: "MM", error: hasError, allowCustomValue: true, inputMode: "numeric", maxLength: 2 }), jsxRuntime.jsx(SelectComponent.Select, { options: userInputForm.YEAR_OPTIONS, value: year, onValueChange: function (val) { return handleDateChange_1("year", val); }, placeholder: "AAAA", error: hasError, allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 4 })] }));
105
+ return (jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsxRuntime.jsx(SelectComponent.Select, { options: userInputForm.DAY_OPTIONS, value: day, onValueChange: function (val) { return handleDateChange_1("day", val); }, placeholder: "JJ", error: hasError, allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 2 }), jsxRuntime.jsx(SelectComponent.Select, { options: MONTH_OPTIONS_WITH_NUMERIC_LABEL, value: month, onValueChange: function (val) { return handleDateChange_1("month", val); }, placeholder: "MM", error: hasError, allowCustomValue: true, inputMode: "numeric", maxLength: 2 }), jsxRuntime.jsx(SelectComponent.Select, { options: userInputForm.YEAR_OPTIONS, value: year, onValueChange: function (val) { return handleDateChange_1("year", val); }, placeholder: "AAAA", error: hasError, allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 4 })] }));
106
106
  case "boolean":
107
107
  return (jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntime.jsx("input", { id: field.id, type: "checkbox", checked: value || false, onChange: function (e) { return onFieldChange(field.id, e.target.checked); }, className: "h-4 w-4 text-[#11E5C5] border-gray-300 rounded focus:ring-[#11E5C5]" }), field.description && (jsxRuntime.jsx("span", { className: "text-sm text-gray-600", children: field.description }))] }));
108
108
  case "enum":
@@ -1 +1 @@
1
- {"version":3,"file":"CustomFormFields.js","sources":["../../../../../../src/components/session/UserInputForm/CustomFormFields.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport type { CustomField, ListColumn } from \"../../../types/session\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport AddressFields from \"./AddressFields\";\nimport type { AddressSuggestion } from \"../../../types/userInputForm\";\nimport {\n DAY_OPTIONS,\n MONTH_OPTIONS,\n YEAR_OPTIONS,\n} from \"../../../constants/userInputForm\";\nimport {\n createEmptyListRow,\n ensureMinimumListRows,\n getListFieldMinRows,\n normalizeListColumns,\n} from \"../../../utils/listFieldUtils\";\n\n/**\n * Sous-composant dédié au rendu d'une cellule du tableau dynamique.\n * Nécessaire pour que les hooks internes à Select soient toujours appelés\n * de façon stable (règle des hooks React).\n */\nconst ListCell = ({\n col,\n value,\n hasError,\n cellClasses,\n onChange,\n}: {\n col: ListColumn;\n value: string;\n hasError: boolean;\n cellClasses: string;\n onChange: (val: string) => void;\n}) => {\n if (col.type === \"enum\") {\n return (\n <Select\n options={(col.options ?? []).map((opt) => ({ value: opt, label: opt }))}\n value={value}\n onValueChange={onChange}\n placeholder={col.label}\n error={hasError}\n compact\n />\n );\n }\n return (\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={col.label}\n className={cellClasses}\n />\n );\n};\n\nconst MONTH_OPTIONS_WITH_NUMERIC_LABEL = MONTH_OPTIONS.map((option, index) => ({\n ...option,\n label: (index + 1).toString().padStart(2, \"0\"),\n}));\n\ninterface CustomFormFieldsProps {\n customFields: CustomField[];\n formData: Record<string, any>;\n errors: Record<string, boolean>;\n onFieldChange: (fieldId: string, value: any) => void;\n // Address autocomplete props (for address field type)\n addressSuggestions?: AddressSuggestion[];\n showSuggestions?: boolean;\n onAddressChange?: (fieldId: string, value: string) => void;\n onAddressFocus?: (fieldId: string) => void;\n onAddressBlur?: (fieldId: string) => void;\n onApplySuggestion?: (fieldId: string, suggestion: AddressSuggestion) => void;\n}\n\nconst CustomFormFields = ({\n customFields,\n formData,\n errors,\n onFieldChange,\n addressSuggestions = [],\n showSuggestions = false,\n onAddressChange,\n onAddressFocus,\n onAddressBlur,\n onApplySuggestion,\n}: CustomFormFieldsProps) => {\n const { t } = useI18n();\n\n console.log(\"🎨 [CustomFormFields] Rendering with:\", {\n fieldsCount: customFields.length,\n fields: customFields.map((f) => ({\n id: f.id,\n label: f.label,\n type: f.valueType,\n })),\n formData,\n errors,\n });\n\n const renderField = (field: CustomField) => {\n const hasError = errors[field.id];\n const value = formData[field.id];\n\n // Classes communes (EXACTEMENT comme IdentityFields/ContactFields)\n const inputClasses = clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n hasError\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\",\n );\n\n switch (field.valueType) {\n case \"text\":\n return (\n <input\n id={field.id}\n type=\"text\"\n value={value || \"\"}\n onChange={(e) => onFieldChange(field.id, e.target.value)}\n placeholder={field.placeholder}\n className={inputClasses}\n autoComplete=\"off\"\n />\n );\n\n case \"number\":\n return (\n <input\n id={field.id}\n type=\"number\"\n inputMode=\"numeric\"\n value={value || \"\"}\n onChange={(e) => onFieldChange(field.id, e.target.value)}\n placeholder={field.placeholder}\n className={inputClasses}\n />\n );\n\n case \"date\":\n // Parse existing date value (DD-MM-YYYY format)\n const dateParts = value ? value.split(\"-\") : [\"\", \"\", \"\"];\n const day = dateParts[0] || \"\";\n const month = dateParts[1] || \"\";\n const year = dateParts[2] || \"\";\n\n const handleDateChange = (\n part: \"day\" | \"month\" | \"year\",\n partValue: string,\n ) => {\n const currentParts = value ? value.split(\"-\") : [\"\", \"\", \"\"];\n const newDay = part === \"day\" ? partValue : currentParts[0] || \"\";\n const newMonth = part === \"month\" ? partValue : currentParts[1] || \"\";\n const newYear = part === \"year\" ? partValue : currentParts[2] || \"\";\n\n // Validate month range (1-12)\n if (part === \"month\" && partValue) {\n const monthNum = parseInt(partValue, 10);\n if (monthNum < 1 || monthNum > 12) {\n // Don't save invalid month\n return;\n }\n }\n\n // Validate day range (1-31) - basic validation\n if (part === \"day\" && partValue) {\n const dayNum = parseInt(partValue, 10);\n if (dayNum < 1 || dayNum > 31) {\n // Don't save invalid day\n return;\n }\n }\n\n // Always store the current state (even partial dates)\n const dateString = `${newDay}-${newMonth}-${newYear}`;\n onFieldChange(field.id, dateString);\n };\n\n return (\n <div className=\"grid grid-cols-3 gap-2 md:gap-3\">\n <Select\n options={DAY_OPTIONS}\n value={day}\n onValueChange={(val) => handleDateChange(\"day\", val)}\n placeholder=\"DD\"\n error={hasError}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n />\n <Select\n options={MONTH_OPTIONS_WITH_NUMERIC_LABEL}\n value={month}\n onValueChange={(val) => handleDateChange(\"month\", val)}\n placeholder=\"MM\"\n error={hasError}\n allowCustomValue\n inputMode=\"numeric\"\n maxLength={2}\n />\n <Select\n options={YEAR_OPTIONS}\n value={year}\n onValueChange={(val) => handleDateChange(\"year\", val)}\n placeholder=\"AAAA\"\n error={hasError}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={4}\n />\n </div>\n );\n\n case \"boolean\":\n return (\n <div className=\"flex items-center gap-2\">\n <input\n id={field.id}\n type=\"checkbox\"\n checked={value || false}\n onChange={(e) => onFieldChange(field.id, e.target.checked)}\n className=\"h-4 w-4 text-[#11E5C5] border-gray-300 rounded focus:ring-[#11E5C5]\"\n />\n {field.description && (\n <span className=\"text-sm text-gray-600\">{field.description}</span>\n )}\n </div>\n );\n\n case \"enum\":\n return (\n <Select\n options={(field.enumOptions || []).map((opt) => ({\n value: opt,\n label: opt,\n }))}\n value={value || \"\"}\n onValueChange={(val) => onFieldChange(field.id, val)}\n placeholder={field.placeholder || t(\"custom_form.select_option\")}\n error={hasError}\n />\n );\n\n case \"address\":\n // For address, use the existing AddressFields component\n const addressValue = value || {};\n const addressForm = {\n lastName: \"\",\n firstName: \"\",\n birthDate: \"\",\n day: \"\",\n month: \"\",\n year: \"\",\n email: \"\",\n phoneNumber: \"\",\n sms: \"\",\n addressLine1: addressValue.addressLine1 || \"\",\n addressLine2: addressValue.addressLine2 || \"\",\n postalCode: addressValue.postalCode || \"\",\n city: addressValue.city || \"\",\n countryCode: addressValue.countryCode || \"\",\n nationality: \"\",\n companyName: \"\",\n siret: \"\",\n tva: \"\",\n };\n\n return (\n <AddressFields\n form={addressForm}\n errors={{\n addressLine1: hasError,\n addressLine2: false,\n postalCode: hasError,\n city: hasError,\n country: hasError,\n }}\n requestedFields={new Set([\"adresse\"])}\n onFieldChange={(key, val) => {\n const updatedAddress = {\n ...addressValue,\n [key]: val,\n };\n onFieldChange(field.id, updatedAddress);\n }}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={(val) => {\n const updatedAddress = {\n ...addressValue,\n addressLine1: val,\n };\n onFieldChange(field.id, updatedAddress);\n onAddressChange?.(field.id, val);\n }}\n onAddressFocus={() => onAddressFocus?.(field.id)}\n onAddressBlur={() => onAddressBlur?.(field.id)}\n onApplySuggestion={(suggestion) => {\n const updatedAddress = {\n addressLine1: suggestion.label || \"\",\n addressLine2: addressValue.addressLine2 || \"\",\n postalCode: suggestion.postalCode || \"\",\n city: suggestion.city || \"\",\n countryCode: suggestion.countryCode || \"\",\n };\n onFieldChange(field.id, updatedAddress);\n onApplySuggestion?.(field.id, suggestion);\n }}\n />\n );\n\n case \"list\": {\n const persistedRows: Record<string, string>[] = Array.isArray(value)\n ? value\n : [];\n const columns: ListColumn[] = normalizeListColumns(field.listColumns);\n const minRows = getListFieldMinRows(field);\n const rows = ensureMinimumListRows(persistedRows, columns, minRows);\n const gridTemplateColumns = `repeat(${columns.length}, minmax(180px, 1fr)) 32px`;\n const gridMinWidth = `${columns.length * 180 + (columns.length - 1) * 8 + 32}px`;\n\n if (columns.length === 0) {\n return (\n <p className=\"text-sm text-red-600\">\n {t(\n \"custom_form.list_missing_columns\",\n \"Ce tableau n'a pas de colonnes configurées.\",\n )}\n </p>\n );\n }\n\n const handleRowChange = (\n rowIndex: number,\n colName: string,\n colValue: string,\n ) => {\n const updated = [...rows];\n updated[rowIndex] = { ...updated[rowIndex], [colName]: colValue };\n onFieldChange(field.id, updated);\n };\n\n const handleAddRow = () => {\n const emptyRow = createEmptyListRow(columns);\n onFieldChange(field.id, [...rows, emptyRow]);\n };\n\n const handleRemoveRow = (rowIndex: number) => {\n if (rows.length <= minRows) {\n return;\n }\n\n onFieldChange(\n field.id,\n rows.filter((_, i) => i !== rowIndex),\n );\n };\n\n const cellClasses = clsx(\n \"w-full px-2 py-2 border rounded-lg text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n hasError\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\",\n );\n\n return (\n <div className=\"space-y-3 overflow-x-auto\">\n {columns.length > 0 && (\n <div\n className=\"grid gap-2 items-center w-full\"\n style={{\n gridTemplateColumns,\n minWidth: gridMinWidth,\n }}\n >\n {columns.map((col) => (\n <span\n key={col.label}\n className=\"text-xs font-semibold text-gray-600 uppercase tracking-wide truncate\"\n >\n {col.label}\n </span>\n ))}\n <span />\n </div>\n )}\n\n {rows.map((row, rowIndex) => (\n <div\n key={rowIndex}\n className=\"grid gap-2 items-center w-full\"\n style={{\n gridTemplateColumns,\n minWidth: gridMinWidth,\n }}\n >\n {columns.map((col) => (\n <ListCell\n key={col.label}\n col={col}\n value={row[col.label] || \"\"}\n hasError={hasError}\n cellClasses={cellClasses}\n onChange={(val) => handleRowChange(rowIndex, col.label, val)}\n />\n ))}\n <button\n type=\"button\"\n onClick={() => handleRemoveRow(rowIndex)}\n className={clsx(\n \"flex items-center justify-center w-8 h-8 rounded-full transition-colors\",\n rows.length <= minRows\n ? \"text-gray-300 cursor-not-allowed\"\n : \"text-gray-400 hover:text-red-500 hover:bg-red-50\",\n )}\n aria-label={t(\"custom_form.remove_row\", \"Supprimer la ligne\")}\n disabled={rows.length <= minRows}\n >\n ✕\n </button>\n </div>\n ))}\n\n <button\n type=\"button\"\n onClick={handleAddRow}\n className=\"flex items-center gap-2 text-sm text-[#11E5C5] hover:underline font-medium\"\n >\n + {t(\"custom_form.add_row\", \"Ajouter une ligne\")}\n </button>\n </div>\n );\n }\n\n default:\n return null;\n }\n };\n\n return (\n <Fragment>\n {customFields.map((field) => (\n <div key={field.id} className=\"space-y-2\">\n <Label.Root\n htmlFor={field.id}\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </Label.Root>\n\n {field.description && field.valueType !== \"boolean\" && (\n <p className=\"text-xs text-gray-500 -mt-1\">{field.description}</p>\n )}\n\n {renderField(field)}\n\n {errors[field.id] && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {field.required\n ? t(\"custom_form.required_field\")\n : t(\"custom_form.invalid_value\")}\n </p>\n )}\n </div>\n ))}\n </Fragment>\n );\n};\n\nexport default CustomFormFields;\n"],"names":["_jsx","Select","MONTH_OPTIONS","__assign","useI18n","_jsxs","DAY_OPTIONS","YEAR_OPTIONS","AddressFields","normalizeListColumns","getListFieldMinRows","ensureMinimumListRows","__spreadArray","createEmptyListRow","Fragment","Label"],"mappings":"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"}
1
+ {"version":3,"file":"CustomFormFields.js","sources":["../../../../../../src/components/session/UserInputForm/CustomFormFields.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport type { CustomField, ListColumn } from \"../../../types/session\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport AddressFields from \"./AddressFields\";\nimport type { AddressSuggestion } from \"../../../types/userInputForm\";\nimport {\n DAY_OPTIONS,\n MONTH_OPTIONS,\n YEAR_OPTIONS,\n} from \"../../../constants/userInputForm\";\nimport {\n createEmptyListRow,\n ensureMinimumListRows,\n getListFieldMinRows,\n normalizeListColumns,\n} from \"../../../utils/listFieldUtils\";\n\n/**\n * Sous-composant dédié au rendu d'une cellule du tableau dynamique.\n * Nécessaire pour que les hooks internes à Select soient toujours appelés\n * de façon stable (règle des hooks React).\n */\nconst ListCell = ({\n col,\n value,\n hasError,\n cellClasses,\n onChange,\n}: {\n col: ListColumn;\n value: string;\n hasError: boolean;\n cellClasses: string;\n onChange: (val: string) => void;\n}) => {\n if (col.type === \"enum\") {\n return (\n <Select\n options={(col.options ?? []).map((opt) => ({ value: opt, label: opt }))}\n value={value}\n onValueChange={onChange}\n placeholder={col.label}\n error={hasError}\n compact\n />\n );\n }\n return (\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={col.label}\n className={cellClasses}\n />\n );\n};\n\nconst MONTH_OPTIONS_WITH_NUMERIC_LABEL = MONTH_OPTIONS.map((option, index) => ({\n ...option,\n label: (index + 1).toString().padStart(2, \"0\"),\n}));\n\ninterface CustomFormFieldsProps {\n customFields: CustomField[];\n formData: Record<string, any>;\n errors: Record<string, boolean>;\n onFieldChange: (fieldId: string, value: any) => void;\n // Address autocomplete props (for address field type)\n addressSuggestions?: AddressSuggestion[];\n showSuggestions?: boolean;\n onAddressChange?: (fieldId: string, value: string) => void;\n onAddressFocus?: (fieldId: string) => void;\n onAddressBlur?: (fieldId: string) => void;\n onApplySuggestion?: (fieldId: string, suggestion: AddressSuggestion) => void;\n}\n\nconst CustomFormFields = ({\n customFields,\n formData,\n errors,\n onFieldChange,\n addressSuggestions = [],\n showSuggestions = false,\n onAddressChange,\n onAddressFocus,\n onAddressBlur,\n onApplySuggestion,\n}: CustomFormFieldsProps) => {\n const { t } = useI18n();\n\n console.log(\"🎨 [CustomFormFields] Rendering with:\", {\n fieldsCount: customFields.length,\n fields: customFields.map((f) => ({\n id: f.id,\n label: f.label,\n type: f.valueType,\n })),\n formData,\n errors,\n });\n\n const renderField = (field: CustomField) => {\n const hasError = errors[field.id];\n const value = formData[field.id];\n\n // Classes communes (EXACTEMENT comme IdentityFields/ContactFields)\n const inputClasses = clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n hasError\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\",\n );\n\n switch (field.valueType) {\n case \"text\":\n return (\n <input\n id={field.id}\n type=\"text\"\n value={value || \"\"}\n onChange={(e) => onFieldChange(field.id, e.target.value)}\n placeholder={field.placeholder}\n className={inputClasses}\n autoComplete=\"off\"\n />\n );\n\n case \"number\":\n return (\n <input\n id={field.id}\n type=\"number\"\n inputMode=\"numeric\"\n value={value || \"\"}\n onChange={(e) => onFieldChange(field.id, e.target.value)}\n placeholder={field.placeholder}\n className={inputClasses}\n />\n );\n\n case \"date\":\n // Parse existing date value (DD-MM-YYYY format)\n const dateParts = value ? value.split(\"-\") : [\"\", \"\", \"\"];\n const day = dateParts[0] || \"\";\n const month = dateParts[1] || \"\";\n const year = dateParts[2] || \"\";\n\n const handleDateChange = (\n part: \"day\" | \"month\" | \"year\",\n partValue: string,\n ) => {\n const currentParts = value ? value.split(\"-\") : [\"\", \"\", \"\"];\n const newDay = part === \"day\" ? partValue : currentParts[0] || \"\";\n const newMonth = part === \"month\" ? partValue : currentParts[1] || \"\";\n const newYear = part === \"year\" ? partValue : currentParts[2] || \"\";\n\n // Validate month range (1-12)\n if (part === \"month\" && partValue) {\n const monthNum = parseInt(partValue, 10);\n if (monthNum < 1 || monthNum > 12) {\n // Don't save invalid month\n return;\n }\n }\n\n // Validate day range (1-31) - basic validation\n if (part === \"day\" && partValue) {\n const dayNum = parseInt(partValue, 10);\n if (dayNum < 1 || dayNum > 31) {\n // Don't save invalid day\n return;\n }\n }\n\n // Always store the current state (even partial dates)\n const dateString = `${newDay}-${newMonth}-${newYear}`;\n onFieldChange(field.id, dateString);\n };\n\n return (\n <div className=\"grid grid-cols-3 gap-2 md:gap-3\">\n <Select\n options={DAY_OPTIONS}\n value={day}\n onValueChange={(val) => handleDateChange(\"day\", val)}\n placeholder=\"JJ\"\n error={hasError}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n />\n <Select\n options={MONTH_OPTIONS_WITH_NUMERIC_LABEL}\n value={month}\n onValueChange={(val) => handleDateChange(\"month\", val)}\n placeholder=\"MM\"\n error={hasError}\n allowCustomValue\n inputMode=\"numeric\"\n maxLength={2}\n />\n <Select\n options={YEAR_OPTIONS}\n value={year}\n onValueChange={(val) => handleDateChange(\"year\", val)}\n placeholder=\"AAAA\"\n error={hasError}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={4}\n />\n </div>\n );\n\n case \"boolean\":\n return (\n <div className=\"flex items-center gap-2\">\n <input\n id={field.id}\n type=\"checkbox\"\n checked={value || false}\n onChange={(e) => onFieldChange(field.id, e.target.checked)}\n className=\"h-4 w-4 text-[#11E5C5] border-gray-300 rounded focus:ring-[#11E5C5]\"\n />\n {field.description && (\n <span className=\"text-sm text-gray-600\">{field.description}</span>\n )}\n </div>\n );\n\n case \"enum\":\n return (\n <Select\n options={(field.enumOptions || []).map((opt) => ({\n value: opt,\n label: opt,\n }))}\n value={value || \"\"}\n onValueChange={(val) => onFieldChange(field.id, val)}\n placeholder={field.placeholder || t(\"custom_form.select_option\")}\n error={hasError}\n />\n );\n\n case \"address\":\n // For address, use the existing AddressFields component\n const addressValue = value || {};\n const addressForm = {\n lastName: \"\",\n firstName: \"\",\n birthDate: \"\",\n day: \"\",\n month: \"\",\n year: \"\",\n email: \"\",\n phoneNumber: \"\",\n sms: \"\",\n addressLine1: addressValue.addressLine1 || \"\",\n addressLine2: addressValue.addressLine2 || \"\",\n postalCode: addressValue.postalCode || \"\",\n city: addressValue.city || \"\",\n countryCode: addressValue.countryCode || \"\",\n nationality: \"\",\n companyName: \"\",\n siret: \"\",\n tva: \"\",\n };\n\n return (\n <AddressFields\n form={addressForm}\n errors={{\n addressLine1: hasError,\n addressLine2: false,\n postalCode: hasError,\n city: hasError,\n country: hasError,\n }}\n requestedFields={new Set([\"adresse\"])}\n onFieldChange={(key, val) => {\n const updatedAddress = {\n ...addressValue,\n [key]: val,\n };\n onFieldChange(field.id, updatedAddress);\n }}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={(val) => {\n const updatedAddress = {\n ...addressValue,\n addressLine1: val,\n };\n onFieldChange(field.id, updatedAddress);\n onAddressChange?.(field.id, val);\n }}\n onAddressFocus={() => onAddressFocus?.(field.id)}\n onAddressBlur={() => onAddressBlur?.(field.id)}\n onApplySuggestion={(suggestion) => {\n const updatedAddress = {\n addressLine1: suggestion.label || \"\",\n addressLine2: addressValue.addressLine2 || \"\",\n postalCode: suggestion.postalCode || \"\",\n city: suggestion.city || \"\",\n countryCode: suggestion.countryCode || \"\",\n };\n onFieldChange(field.id, updatedAddress);\n onApplySuggestion?.(field.id, suggestion);\n }}\n />\n );\n\n case \"list\": {\n const persistedRows: Record<string, string>[] = Array.isArray(value)\n ? value\n : [];\n const columns: ListColumn[] = normalizeListColumns(field.listColumns);\n const minRows = getListFieldMinRows(field);\n const rows = ensureMinimumListRows(persistedRows, columns, minRows);\n const gridTemplateColumns = `repeat(${columns.length}, minmax(180px, 1fr)) 32px`;\n const gridMinWidth = `${columns.length * 180 + (columns.length - 1) * 8 + 32}px`;\n\n if (columns.length === 0) {\n return (\n <p className=\"text-sm text-red-600\">\n {t(\n \"custom_form.list_missing_columns\",\n \"Ce tableau n'a pas de colonnes configurées.\",\n )}\n </p>\n );\n }\n\n const handleRowChange = (\n rowIndex: number,\n colName: string,\n colValue: string,\n ) => {\n const updated = [...rows];\n updated[rowIndex] = { ...updated[rowIndex], [colName]: colValue };\n onFieldChange(field.id, updated);\n };\n\n const handleAddRow = () => {\n const emptyRow = createEmptyListRow(columns);\n onFieldChange(field.id, [...rows, emptyRow]);\n };\n\n const handleRemoveRow = (rowIndex: number) => {\n if (rows.length <= minRows) {\n return;\n }\n\n onFieldChange(\n field.id,\n rows.filter((_, i) => i !== rowIndex),\n );\n };\n\n const cellClasses = clsx(\n \"w-full px-2 py-2 border rounded-lg text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n hasError\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\",\n );\n\n return (\n <div className=\"space-y-3 overflow-x-auto\">\n {columns.length > 0 && (\n <div\n className=\"grid gap-2 items-center w-full\"\n style={{\n gridTemplateColumns,\n minWidth: gridMinWidth,\n }}\n >\n {columns.map((col) => (\n <span\n key={col.label}\n className=\"text-xs font-semibold text-gray-600 uppercase tracking-wide truncate\"\n >\n {col.label}\n </span>\n ))}\n <span />\n </div>\n )}\n\n {rows.map((row, rowIndex) => (\n <div\n key={rowIndex}\n className=\"grid gap-2 items-center w-full\"\n style={{\n gridTemplateColumns,\n minWidth: gridMinWidth,\n }}\n >\n {columns.map((col) => (\n <ListCell\n key={col.label}\n col={col}\n value={row[col.label] || \"\"}\n hasError={hasError}\n cellClasses={cellClasses}\n onChange={(val) => handleRowChange(rowIndex, col.label, val)}\n />\n ))}\n <button\n type=\"button\"\n onClick={() => handleRemoveRow(rowIndex)}\n className={clsx(\n \"flex items-center justify-center w-8 h-8 rounded-full transition-colors\",\n rows.length <= minRows\n ? \"text-gray-300 cursor-not-allowed\"\n : \"text-gray-400 hover:text-red-500 hover:bg-red-50\",\n )}\n aria-label={t(\"custom_form.remove_row\", \"Supprimer la ligne\")}\n disabled={rows.length <= minRows}\n >\n ✕\n </button>\n </div>\n ))}\n\n <button\n type=\"button\"\n onClick={handleAddRow}\n className=\"flex items-center gap-2 text-sm text-[#11E5C5] hover:underline font-medium\"\n >\n + {t(\"custom_form.add_row\", \"Ajouter une ligne\")}\n </button>\n </div>\n );\n }\n\n default:\n return null;\n }\n };\n\n return (\n <Fragment>\n {customFields.map((field) => (\n <div key={field.id} className=\"space-y-2\">\n <Label.Root\n htmlFor={field.id}\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {field.label}\n {field.required && <span className=\"text-red-500 ml-1\">*</span>}\n </Label.Root>\n\n {field.description && field.valueType !== \"boolean\" && (\n <p className=\"text-xs text-gray-500 -mt-1\">{field.description}</p>\n )}\n\n {renderField(field)}\n\n {errors[field.id] && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {field.required\n ? t(\"custom_form.required_field\")\n : t(\"custom_form.invalid_value\")}\n </p>\n )}\n </div>\n ))}\n </Fragment>\n );\n};\n\nexport default CustomFormFields;\n"],"names":["_jsx","Select","MONTH_OPTIONS","__assign","useI18n","_jsxs","DAY_OPTIONS","YEAR_OPTIONS","AddressFields","normalizeListColumns","getListFieldMinRows","ensureMinimumListRows","__spreadArray","createEmptyListRow","Fragment","Label"],"mappings":"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"}
@@ -64,7 +64,7 @@ var IdentityFields = function (_a) {
64
64
  ? "border-red-500 bg-red-50"
65
65
  : "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.firstName && (jsxRuntime.jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.first_name_required")] }))] })), requestedFields.has("nom") && (jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx(Label__namespace.Root, { htmlFor: "lastName", className: "block text-sm md:text-base font-semibold text-gray-900", children: t(userInputForm.FIELD_LABELS.nom) }), jsxRuntime.jsx("input", { id: "lastName", type: "text", value: form.lastName || "", onChange: function (event) { return onFieldChange("lastName", event.target.value); }, placeholder: t("user_input_form.placeholders.last_name"), className: clsx("w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent", errors.lastName
66
66
  ? "border-red-500 bg-red-50"
67
- : "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.lastName && (jsxRuntime.jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.last_name_required")] }))] })), requestedFields.has("date_naissance") && (jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx(Label__namespace.Root, { className: "block text-sm md:text-base font-semibold text-gray-900", children: t(userInputForm.FIELD_LABELS.date_naissance) }), jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsxRuntime.jsx(SelectComponent.Select, { ref: dayRef, options: userInputForm.DAY_OPTIONS, value: form.day || "", onValueChange: handleDayChange, placeholder: "DD", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 2 }), jsxRuntime.jsx(SelectComponent.Select, { ref: monthRef, options: monthOptionsWithTranslation, value: form.month || "", onValueChange: handleMonthChange, placeholder: "MM", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", maxLength: 9 }), jsxRuntime.jsx(SelectComponent.Select, { ref: yearRef, options: userInputForm.YEAR_OPTIONS, value: form.year || "", onValueChange: handleYearChange, placeholder: "AAAA", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 4 })] }), errors.birthDate && (jsxRuntime.jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.birth_date_required")] })), errors.notMajor && (jsxRuntime.jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.not_major")] }))] }))] }));
67
+ : "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.lastName && (jsxRuntime.jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.last_name_required")] }))] })), requestedFields.has("date_naissance") && (jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx(Label__namespace.Root, { className: "block text-sm md:text-base font-semibold text-gray-900", children: t(userInputForm.FIELD_LABELS.date_naissance) }), jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsxRuntime.jsx(SelectComponent.Select, { ref: dayRef, options: userInputForm.DAY_OPTIONS, value: form.day || "", onValueChange: handleDayChange, placeholder: "JJ", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 2 }), jsxRuntime.jsx(SelectComponent.Select, { ref: monthRef, options: monthOptionsWithTranslation, value: form.month || "", onValueChange: handleMonthChange, placeholder: "MM", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", maxLength: 9 }), jsxRuntime.jsx(SelectComponent.Select, { ref: yearRef, options: userInputForm.YEAR_OPTIONS, value: form.year || "", onValueChange: handleYearChange, placeholder: "AAAA", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 4 })] }), errors.birthDate && (jsxRuntime.jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.birth_date_required")] })), errors.notMajor && (jsxRuntime.jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.not_major")] }))] }))] }));
68
68
  };
69
69
 
70
70
  exports.default = IdentityFields;
@@ -1 +1 @@
1
- {"version":3,"file":"IdentityFields.js","sources":["../../../../../../src/components/session/UserInputForm/IdentityFields.tsx"],"sourcesContent":["import { Fragment, useMemo, useRef } from \"react\";\nimport * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport {\n DAY_OPTIONS,\n FIELD_LABELS,\n MONTH_OPTIONS,\n YEAR_OPTIONS,\n} from \"../../../constants/userInputForm\";\nimport type {\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\ninterface IdentityFieldsProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n}\n\nconst IdentityFields = ({\n form,\n errors,\n requestedFields,\n onFieldChange,\n}: IdentityFieldsProps) => {\n const { t } = useI18n();\n const dayRef = useRef<HTMLInputElement>(null);\n const monthRef = useRef<HTMLInputElement>(null);\n const yearRef = useRef<HTMLInputElement>(null);\n\n const monthOptionsWithTranslation = useMemo(\n () =>\n MONTH_OPTIONS.map((option, index) => ({\n ...option,\n label: (index + 1).toString().padStart(2, \"0\"),\n })),\n []\n );\n\n const handleDayChange = (value: string) => {\n onFieldChange(\"day\", value);\n if (value.length === 2) {\n monthRef.current?.focus();\n }\n };\n\n const handleMonthChange = (value: string) => {\n onFieldChange(\"month\", value);\n if (value.length === 2) {\n yearRef.current?.focus();\n }\n };\n\n const handleYearChange = (value: string) => {\n onFieldChange(\"year\", value);\n if (value.length === 4) {\n yearRef.current?.blur();\n }\n };\n\n return (\n <Fragment>\n {requestedFields.has(\"prenom\") && (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"firstName\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(FIELD_LABELS.prenom)}\n </Label.Root>\n <input\n id=\"firstName\"\n type=\"text\"\n value={form.firstName || \"\"}\n onChange={(event) => onFieldChange(\"firstName\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.first_name\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.firstName\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"off\"\n />\n {errors.firstName && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.first_name_required\")}\n </p>\n )}\n </div>\n )}\n\n {requestedFields.has(\"nom\") && (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"lastName\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(FIELD_LABELS.nom)}\n </Label.Root>\n <input\n id=\"lastName\"\n type=\"text\"\n value={form.lastName || \"\"}\n onChange={(event) => onFieldChange(\"lastName\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.last_name\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.lastName\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"off\"\n />\n {errors.lastName && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.last_name_required\")}\n </p>\n )}\n </div>\n )}\n\n {requestedFields.has(\"date_naissance\") && (\n <div className=\"space-y-2\">\n <Label.Root className=\"block text-sm md:text-base font-semibold text-gray-900\">\n {t(FIELD_LABELS.date_naissance)}\n </Label.Root>\n <div className=\"grid grid-cols-3 gap-2 md:gap-3\">\n <Select\n ref={dayRef}\n options={DAY_OPTIONS}\n value={form.day || \"\"}\n onValueChange={handleDayChange}\n placeholder=\"DD\"\n error={Boolean(errors.birthDate || errors.notMajor)}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n />\n <Select\n ref={monthRef}\n options={monthOptionsWithTranslation}\n value={form.month || \"\"}\n onValueChange={handleMonthChange}\n placeholder=\"MM\"\n error={Boolean(errors.birthDate || errors.notMajor)}\n allowCustomValue\n inputMode=\"numeric\"\n maxLength={9}\n />\n <Select\n ref={yearRef}\n options={YEAR_OPTIONS}\n value={form.year || \"\"}\n onValueChange={handleYearChange}\n placeholder=\"AAAA\"\n error={Boolean(errors.birthDate || errors.notMajor)}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={4}\n />\n </div>\n {errors.birthDate && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.birth_date_required\")}\n </p>\n )}\n {errors.notMajor && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.not_major\")}\n </p>\n )}\n </div>\n )}\n </Fragment>\n );\n};\n\nexport default IdentityFields;\n"],"names":["useI18n","useRef","useMemo","MONTH_OPTIONS","__assign","_jsxs","Fragment","_jsx","Label","FIELD_LABELS","Select","DAY_OPTIONS","YEAR_OPTIONS"],"mappings":"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"}
1
+ {"version":3,"file":"IdentityFields.js","sources":["../../../../../../src/components/session/UserInputForm/IdentityFields.tsx"],"sourcesContent":["import { Fragment, useMemo, useRef } from \"react\";\nimport * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport {\n DAY_OPTIONS,\n FIELD_LABELS,\n MONTH_OPTIONS,\n YEAR_OPTIONS,\n} from \"../../../constants/userInputForm\";\nimport type {\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\ninterface IdentityFieldsProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n}\n\nconst IdentityFields = ({\n form,\n errors,\n requestedFields,\n onFieldChange,\n}: IdentityFieldsProps) => {\n const { t } = useI18n();\n const dayRef = useRef<HTMLInputElement>(null);\n const monthRef = useRef<HTMLInputElement>(null);\n const yearRef = useRef<HTMLInputElement>(null);\n\n const monthOptionsWithTranslation = useMemo(\n () =>\n MONTH_OPTIONS.map((option, index) => ({\n ...option,\n label: (index + 1).toString().padStart(2, \"0\"),\n })),\n []\n );\n\n const handleDayChange = (value: string) => {\n onFieldChange(\"day\", value);\n if (value.length === 2) {\n monthRef.current?.focus();\n }\n };\n\n const handleMonthChange = (value: string) => {\n onFieldChange(\"month\", value);\n if (value.length === 2) {\n yearRef.current?.focus();\n }\n };\n\n const handleYearChange = (value: string) => {\n onFieldChange(\"year\", value);\n if (value.length === 4) {\n yearRef.current?.blur();\n }\n };\n\n return (\n <Fragment>\n {requestedFields.has(\"prenom\") && (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"firstName\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(FIELD_LABELS.prenom)}\n </Label.Root>\n <input\n id=\"firstName\"\n type=\"text\"\n value={form.firstName || \"\"}\n onChange={(event) => onFieldChange(\"firstName\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.first_name\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.firstName\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"off\"\n />\n {errors.firstName && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.first_name_required\")}\n </p>\n )}\n </div>\n )}\n\n {requestedFields.has(\"nom\") && (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"lastName\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(FIELD_LABELS.nom)}\n </Label.Root>\n <input\n id=\"lastName\"\n type=\"text\"\n value={form.lastName || \"\"}\n onChange={(event) => onFieldChange(\"lastName\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.last_name\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.lastName\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"off\"\n />\n {errors.lastName && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.last_name_required\")}\n </p>\n )}\n </div>\n )}\n\n {requestedFields.has(\"date_naissance\") && (\n <div className=\"space-y-2\">\n <Label.Root className=\"block text-sm md:text-base font-semibold text-gray-900\">\n {t(FIELD_LABELS.date_naissance)}\n </Label.Root>\n <div className=\"grid grid-cols-3 gap-2 md:gap-3\">\n <Select\n ref={dayRef}\n options={DAY_OPTIONS}\n value={form.day || \"\"}\n onValueChange={handleDayChange}\n placeholder=\"JJ\"\n error={Boolean(errors.birthDate || errors.notMajor)}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={2}\n />\n <Select\n ref={monthRef}\n options={monthOptionsWithTranslation}\n value={form.month || \"\"}\n onValueChange={handleMonthChange}\n placeholder=\"MM\"\n error={Boolean(errors.birthDate || errors.notMajor)}\n allowCustomValue\n inputMode=\"numeric\"\n maxLength={9}\n />\n <Select\n ref={yearRef}\n options={YEAR_OPTIONS}\n value={form.year || \"\"}\n onValueChange={handleYearChange}\n placeholder=\"AAAA\"\n error={Boolean(errors.birthDate || errors.notMajor)}\n allowCustomValue\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n maxLength={4}\n />\n </div>\n {errors.birthDate && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.birth_date_required\")}\n </p>\n )}\n {errors.notMajor && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.not_major\")}\n </p>\n )}\n </div>\n )}\n </Fragment>\n );\n};\n\nexport default IdentityFields;\n"],"names":["useI18n","useRef","useMemo","MONTH_OPTIONS","__assign","_jsxs","Fragment","_jsx","Label","FIELD_LABELS","Select","DAY_OPTIONS","YEAR_OPTIONS"],"mappings":"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"}
@@ -105,7 +105,8 @@ var DocusealSignature = function (_a) {
105
105
  return (jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full p-4 text-center", children: [jsxRuntime.jsx("div", { className: "text-red-500 text-4xl mb-4", children: "\u26A0\uFE0F" }), jsxRuntime.jsx("h2", { className: "text-xl font-bold text-red-600 mb-2", children: t("signature.error_title", "Erreur") }), jsxRuntime.jsx("p", { className: "text-gray-600 mb-4", children: error || t("signature.generic_error", "Impossible de charger le document.") }), jsxRuntime.jsx("button", { className: "px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors", onClick: onBack, children: t("buttons.back", "Retour") })] }));
106
106
  }
107
107
  var src = "https://".concat(host, "/s/").concat(token);
108
- return (jsxRuntime.jsx("div", { className: "w-full flex-1 flex flex-col", style: { minHeight: "600px" }, children: jsxRuntime.jsx(react.DocusealForm, { src: src, host: host, withTitle: false, withSendCopyButton: false, values: prefillValues, readonlyFields: readonlyFieldNames, onComplete: handleComplete, onInit: handleInit, className: "flex-1 w-full h-[600px]" }) }));
108
+ var customCss = "\n input[type=\"date\"] {\n width: 100% !important;\n min-height: 48px !important;\n padding: 10px 14px !important;\n font-size: 18px !important;\n box-sizing: border-box !important;\n }\n ";
109
+ return (jsxRuntime.jsx("div", { className: "w-full flex-1 flex flex-col", style: { minHeight: "600px" }, children: jsxRuntime.jsx(react.DocusealForm, { src: src, host: host, withTitle: false, withSendCopyButton: false, values: prefillValues, readonlyFields: readonlyFieldNames, onComplete: handleComplete, onInit: handleInit, className: "flex-1 w-full h-[600px]", customCss: customCss }) }));
109
110
  };
110
111
 
111
112
  exports.default = DocusealSignature;
@@ -1 +1 @@
1
- {"version":3,"file":"DocusealSignature.js","sources":["../../../../../src/components/signature-electronic/DocusealSignature.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback } from \"react\";\nimport { DocusealForm } from \"@docuseal/react\";\nimport LoadingState from \"../states/LoadingState\";\nimport { useTranslation } from \"react-i18next\";\nimport { getDocusealSigningToken } from \"../../services/integrationService\";\nimport { logSignatureDocumentOpened, logDocumentSigned } from \"../../services/auditTrailService\";\n\nconst DEFAULT_DOCUSEAL_HOST = \"docuseal.datakeen.co\";\n\nconst normalizeDocusealHost = (rawHost?: string | null): string => {\n const candidate = (rawHost ?? \"\").trim() || DEFAULT_DOCUSEAL_HOST;\n // Just return the domain, stripping any protocol to let the component handle it\n return candidate.replace(/^https?:\\/\\//i, \"\").replace(/\\/+$/, \"\");\n};\n\ninterface DocusealSignatureProps {\n sessionId: string;\n templateId: string;\n templateName?: string;\n onComplete: () => void;\n onBack: () => void;\n /** Pre-filled field values from previous information-input steps */\n prefillValues?: Record<string, string>;\n /** Field names that should be read-only in the signing form */\n readonlyFieldNames?: string[];\n}\n\nconst DocusealSignature: React.FC<DocusealSignatureProps> = ({\n sessionId,\n templateId,\n templateName = \"Document\",\n onComplete,\n onBack,\n prefillValues,\n readonlyFieldNames,\n}) => {\n const { t } = useTranslation();\n const [token, setToken] = useState<string | null>(null);\n const [host, setHost] = useState<string>(DEFAULT_DOCUSEAL_HOST);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n\n const fetchData = async () => {\n try {\n setLoading(true);\n\n const data = await getDocusealSigningToken(sessionId, templateId);\n const normalizedHost = normalizeDocusealHost(data?.host);\n\n setToken(data.token);\n setHost(normalizedHost);\n } catch (err) {\n setError(t(\"signature.token_error\", \"Erreur lors du chargement de la signature.\"));\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [sessionId, templateId, t]);\n\n const handleInit = useCallback(async () => {\n try {\n await logSignatureDocumentOpened(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log SIGNATURE_DOCUMENT_OPENED:\", error);\n }\n }, [sessionId, templateId, templateName]);\n\n const handleComplete = useCallback(async () => {\n try {\n await logDocumentSigned(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log DOCUMENT_SIGNED:\", error);\n }\n\n onComplete();\n }, [sessionId, templateId, templateName, onComplete]);\n\n if (loading) {\n return <LoadingState message={t(\"signature.loading\", \"Chargement du document...\")} subtitle=\"\" />;\n }\n\n if (error || !token) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">{t(\"signature.error_title\", \"Erreur\")}</h2>\n <p className=\"text-gray-600 mb-4\">{error || t(\"signature.generic_error\", \"Impossible de charger le document.\")}</p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={onBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n const src = `https://${host}/s/${token}`;\n\n return (\n <div className=\"w-full flex-1 flex flex-col\" style={{ minHeight: \"600px\" }}>\n <DocusealForm\n src={src}\n host={host}\n withTitle={false}\n withSendCopyButton={false}\n values={prefillValues}\n readonlyFields={readonlyFieldNames}\n onComplete={handleComplete}\n onInit={handleInit}\n className=\"flex-1 w-full h-[600px]\"\n />\n </div>\n );\n};\n\nexport default DocusealSignature;\n"],"names":["useTranslation","useState","useEffect","__awaiter","getDocusealSigningToken","useCallback","logSignatureDocumentOpened","logDocumentSigned","_jsx","LoadingState","_jsxs","DocusealForm"],"mappings":"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"}
1
+ {"version":3,"file":"DocusealSignature.js","sources":["../../../../../src/components/signature-electronic/DocusealSignature.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback } from \"react\";\nimport { DocusealForm } from \"@docuseal/react\";\nimport LoadingState from \"../states/LoadingState\";\nimport { useTranslation } from \"react-i18next\";\nimport { getDocusealSigningToken } from \"../../services/integrationService\";\nimport { logSignatureDocumentOpened, logDocumentSigned } from \"../../services/auditTrailService\";\n\nconst DEFAULT_DOCUSEAL_HOST = \"docuseal.datakeen.co\";\n\nconst normalizeDocusealHost = (rawHost?: string | null): string => {\n const candidate = (rawHost ?? \"\").trim() || DEFAULT_DOCUSEAL_HOST;\n // Just return the domain, stripping any protocol to let the component handle it\n return candidate.replace(/^https?:\\/\\//i, \"\").replace(/\\/+$/, \"\");\n};\n\ninterface DocusealSignatureProps {\n sessionId: string;\n templateId: string;\n templateName?: string;\n onComplete: () => void;\n onBack: () => void;\n /** Pre-filled field values from previous information-input steps */\n prefillValues?: Record<string, string>;\n /** Field names that should be read-only in the signing form */\n readonlyFieldNames?: string[];\n}\n\nconst DocusealSignature: React.FC<DocusealSignatureProps> = ({\n sessionId,\n templateId,\n templateName = \"Document\",\n onComplete,\n onBack,\n prefillValues,\n readonlyFieldNames,\n}) => {\n const { t } = useTranslation();\n const [token, setToken] = useState<string | null>(null);\n const [host, setHost] = useState<string>(DEFAULT_DOCUSEAL_HOST);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n\n const fetchData = async () => {\n try {\n setLoading(true);\n\n const data = await getDocusealSigningToken(sessionId, templateId);\n const normalizedHost = normalizeDocusealHost(data?.host);\n\n setToken(data.token);\n setHost(normalizedHost);\n } catch (err) {\n setError(t(\"signature.token_error\", \"Erreur lors du chargement de la signature.\"));\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [sessionId, templateId, t]);\n\n const handleInit = useCallback(async () => {\n try {\n await logSignatureDocumentOpened(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log SIGNATURE_DOCUMENT_OPENED:\", error);\n }\n }, [sessionId, templateId, templateName]);\n\n const handleComplete = useCallback(async () => {\n try {\n await logDocumentSigned(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log DOCUMENT_SIGNED:\", error);\n }\n\n onComplete();\n }, [sessionId, templateId, templateName, onComplete]);\n\n if (loading) {\n return <LoadingState message={t(\"signature.loading\", \"Chargement du document...\")} subtitle=\"\" />;\n }\n\n if (error || !token) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">{t(\"signature.error_title\", \"Erreur\")}</h2>\n <p className=\"text-gray-600 mb-4\">{error || t(\"signature.generic_error\", \"Impossible de charger le document.\")}</p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={onBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n const src = `https://${host}/s/${token}`;\n\n const customCss = `\n input[type=\"date\"] {\n width: 100% !important;\n min-height: 48px !important;\n padding: 10px 14px !important;\n font-size: 18px !important;\n box-sizing: border-box !important;\n }\n `;\n\n return (\n <div className=\"w-full flex-1 flex flex-col\" style={{ minHeight: \"600px\" }}>\n <DocusealForm\n src={src}\n host={host}\n withTitle={false}\n withSendCopyButton={false}\n values={prefillValues}\n readonlyFields={readonlyFieldNames}\n onComplete={handleComplete}\n onInit={handleInit}\n className=\"flex-1 w-full h-[600px]\"\n customCss={customCss}\n />\n </div>\n );\n};\n\nexport default DocusealSignature;\n"],"names":["useTranslation","useState","useEffect","__awaiter","getDocusealSigningToken","useCallback","logSignatureDocumentOpened","logDocumentSigned","_jsx","LoadingState","_jsxs","DocusealForm"],"mappings":"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"}
@@ -12,8 +12,13 @@ var useStepNavigation = function (sessionId, sessionStatus, initialStep, templat
12
12
  var hasInitialized = React.useRef(false);
13
13
  var setStep = function (newStep, skipHistory) {
14
14
  if (skipHistory === void 0) { skipHistory = false; }
15
+ console.log("[setStep] newStep:", newStep, "skipHistory:", skipHistory, "currentStep:", step, "history:", tslib_es6.__spreadArray([], history, true));
15
16
  if (!skipHistory && newStep !== step) {
16
- setHistory(function (prev) { return tslib_es6.__spreadArray(tslib_es6.__spreadArray([], prev, true), [newStep], false); });
17
+ setHistory(function (prev) {
18
+ if (prev[prev.length - 1] === newStep)
19
+ return prev;
20
+ return tslib_es6.__spreadArray(tslib_es6.__spreadArray([], prev, true), [newStep], false);
21
+ });
17
22
  }
18
23
  setStepState(newStep);
19
24
  // Update current step in database
@@ -25,6 +30,7 @@ var useStepNavigation = function (sessionId, sessionStatus, initialStep, templat
25
30
  }
26
31
  };
27
32
  var goBack = function () {
33
+ console.log("[goBack] called — history:", tslib_es6.__spreadArray([], history, true), "step:", step);
28
34
  if (history.length > 1) {
29
35
  var newHistory = tslib_es6.__spreadArray([], history, true);
30
36
  newHistory.pop(); // Remove current step
@@ -36,7 +42,9 @@ var useStepNavigation = function (sessionId, sessionStatus, initialStep, templat
36
42
  // steps are 1-indexed (step 0 = start, step 1 = first node, etc.)
37
43
  var nodeIndex = candidateStep - 1;
38
44
  var candidateNode = orderedNodes[nodeIndex];
45
+ console.log("[goBack] candidate step:", candidateStep, "node:", candidateNode === null || candidateNode === void 0 ? void 0 : candidateNode.type);
39
46
  if (candidateNode && AUTO_EXECUTING_TYPES.has(candidateNode.type)) {
47
+ console.log("[goBack] skipping auto-executing node:", candidateNode.type);
40
48
  newHistory.pop();
41
49
  }
42
50
  else {
@@ -45,11 +53,12 @@ var useStepNavigation = function (sessionId, sessionStatus, initialStep, templat
45
53
  }
46
54
  }
47
55
  var previousStep = newHistory[newHistory.length - 1];
56
+ console.log("[goBack] navigating to step:", previousStep, "newHistory:", newHistory);
48
57
  setHistory(newHistory);
49
58
  setStep(previousStep, true);
50
59
  }
51
60
  else {
52
- console.warn("[useStepNavigation] No history to go back to");
61
+ console.warn("[goBack] BLOCKED history.length <= 1, history:", tslib_es6.__spreadArray([], history, true));
53
62
  }
54
63
  };
55
64
  var goToNextStep = function (currentNodeId, template, handle) {
@@ -74,8 +83,21 @@ var useStepNavigation = function (sessionId, sessionStatus, initialStep, templat
74
83
  }
75
84
  // Only initialize once when initialStep becomes available
76
85
  if (initialStep !== undefined && !hasInitialized.current) {
86
+ console.log("[useStepNavigation] init — initialStep:", initialStep);
77
87
  setStepState(initialStep);
78
- setHistory([initialStep]);
88
+ setHistory(function (prev) {
89
+ // Preserve history if the user already navigated past the initial step
90
+ if (prev.length > 1 && prev[prev.length - 1] === initialStep) {
91
+ console.log("[useStepNavigation] init — preserving existing history:", prev);
92
+ return prev;
93
+ }
94
+ // Reconstruct history by following the graph from step 0
95
+ var reconstructed = template
96
+ ? sessionService.reconstructHistoryToStep(initialStep, template)
97
+ : initialStep > 0 ? [0, initialStep] : [initialStep];
98
+ console.log("[useStepNavigation] init — reconstructed history:", reconstructed);
99
+ return reconstructed;
100
+ });
79
101
  hasInitialized.current = true;
80
102
  }
81
103
  }, [sessionId, sessionStatus, initialStep]);
@@ -1 +1 @@
1
- {"version":3,"file":"useStepNavigation.js","sources":["../../../../src/hooks/useStepNavigation.ts"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport {\n updateSessionCurrentStep,\n getNextStepIndex,\n getOrderedJourneySteps,\n} from \"../services/sessionService\";\nimport type { SessionTemplate } from \"../types/session\";\n\n/** Node types that auto-execute and should be skipped when going back */\nconst AUTO_EXECUTING_TYPES = new Set([\"external-verification\", \"condition\"]);\n\nexport const useStepNavigation = (\n sessionId: string,\n sessionStatus?: string,\n initialStep?: number,\n template?: SessionTemplate,\n) => {\n const [step, setStepState] = useState(initialStep ?? 0);\n const [history, setHistory] = useState<number[]>(initialStep !== undefined ? [initialStep] : [0]);\n const hasInitialized = useRef(false);\n\n const setStep = (newStep: number, skipHistory = false) => {\n if (!skipHistory && newStep !== step) {\n setHistory((prev) => [...prev, newStep]);\n }\n setStepState(newStep);\n\n // Update current step in database\n if (sessionId) {\n updateSessionCurrentStep(sessionId, newStep).catch((error) => {\n console.error(\"Failed to update current step in database:\", error);\n // Non-blocking error - the step is still updated locally\n });\n }\n };\n\n const goBack = () => {\n if (history.length > 1) {\n let newHistory = [...history];\n newHistory.pop(); // Remove current step\n\n // Skip auto-executing nodes when going back\n if (template) {\n const orderedNodes = getOrderedJourneySteps(template);\n while (newHistory.length > 1) {\n const candidateStep = newHistory[newHistory.length - 1];\n // steps are 1-indexed (step 0 = start, step 1 = first node, etc.)\n const nodeIndex = candidateStep - 1;\n const candidateNode = orderedNodes[nodeIndex];\n if (candidateNode && AUTO_EXECUTING_TYPES.has(candidateNode.type)) {\n newHistory.pop();\n } else {\n break;\n }\n }\n }\n\n const previousStep = newHistory[newHistory.length - 1];\n setHistory(newHistory);\n setStep(previousStep, true);\n } else {\n console.warn(\"[useStepNavigation] No history to go back to\");\n }\n };\n\n const goToNextStep = (\n currentNodeId: string,\n template: SessionTemplate,\n handle?: string\n ) => {\n const nextStepIndex = getNextStepIndex(currentNodeId, template, handle);\n\n if (nextStepIndex !== null) {\n console.debug(\n `[useStepNavigation] Navigating from ${currentNodeId} to step index ${nextStepIndex}`\n );\n setStep(nextStepIndex);\n } else {\n console.warn(\n `[useStepNavigation] Could not find next step for node ${currentNodeId}. Staying on current step.`\n );\n }\n };\n\n // Initialize step from session data or status\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n // Check if session is already ended\n if (sessionStatus === \"ended\") {\n setStepState(100);\n return;\n }\n\n // Only initialize once when initialStep becomes available\n if (initialStep !== undefined && !hasInitialized.current) {\n setStepState(initialStep);\n setHistory([initialStep]);\n hasInitialized.current = true;\n }\n }, [sessionId, sessionStatus, initialStep]);\n\n const stepObject = {\n setStep,\n goBack,\n goToNextStep,\n step,\n canGoBack: history.length > 1,\n };\n\n return {\n step,\n setStep,\n goBack,\n goToNextStep,\n stepObject,\n };\n};\n"],"names":["useState","useRef","__spreadArray","updateSessionCurrentStep","getOrderedJourneySteps","getNextStepIndex","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useStepNavigation.js","sources":["../../../../src/hooks/useStepNavigation.ts"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport {\n updateSessionCurrentStep,\n getNextStepIndex,\n getOrderedJourneySteps,\n reconstructHistoryToStep,\n} from \"../services/sessionService\";\nimport type { SessionTemplate } from \"../types/session\";\n\n/** Node types that auto-execute and should be skipped when going back */\nconst AUTO_EXECUTING_TYPES = new Set([\"external-verification\", \"condition\"]);\n\nexport const useStepNavigation = (\n sessionId: string,\n sessionStatus?: string,\n initialStep?: number,\n template?: SessionTemplate,\n) => {\n const [step, setStepState] = useState(initialStep ?? 0);\n const [history, setHistory] = useState<number[]>(initialStep !== undefined ? [initialStep] : [0]);\n const hasInitialized = useRef(false);\n\n const setStep = (newStep: number, skipHistory = false) => {\n console.log(\"[setStep] newStep:\", newStep, \"skipHistory:\", skipHistory, \"currentStep:\", step, \"history:\", [...history]);\n if (!skipHistory && newStep !== step) {\n setHistory((prev) => {\n if (prev[prev.length - 1] === newStep) return prev;\n return [...prev, newStep];\n });\n }\n setStepState(newStep);\n\n // Update current step in database\n if (sessionId) {\n updateSessionCurrentStep(sessionId, newStep).catch((error) => {\n console.error(\"Failed to update current step in database:\", error);\n // Non-blocking error - the step is still updated locally\n });\n }\n };\n\n const goBack = () => {\n console.log(\"[goBack] called — history:\", [...history], \"step:\", step);\n if (history.length > 1) {\n let newHistory = [...history];\n newHistory.pop(); // Remove current step\n\n // Skip auto-executing nodes when going back\n if (template) {\n const orderedNodes = getOrderedJourneySteps(template);\n while (newHistory.length > 1) {\n const candidateStep = newHistory[newHistory.length - 1];\n // steps are 1-indexed (step 0 = start, step 1 = first node, etc.)\n const nodeIndex = candidateStep - 1;\n const candidateNode = orderedNodes[nodeIndex];\n console.log(\"[goBack] candidate step:\", candidateStep, \"node:\", candidateNode?.type);\n if (candidateNode && AUTO_EXECUTING_TYPES.has(candidateNode.type)) {\n console.log(\"[goBack] skipping auto-executing node:\", candidateNode.type);\n newHistory.pop();\n } else {\n break;\n }\n }\n }\n\n const previousStep = newHistory[newHistory.length - 1];\n console.log(\"[goBack] navigating to step:\", previousStep, \"newHistory:\", newHistory);\n setHistory(newHistory);\n setStep(previousStep, true);\n } else {\n console.warn(\"[goBack] BLOCKED history.length <= 1, history:\", [...history]);\n }\n };\n\n const goToNextStep = (\n currentNodeId: string,\n template: SessionTemplate,\n handle?: string\n ) => {\n const nextStepIndex = getNextStepIndex(currentNodeId, template, handle);\n\n if (nextStepIndex !== null) {\n console.debug(\n `[useStepNavigation] Navigating from ${currentNodeId} to step index ${nextStepIndex}`\n );\n setStep(nextStepIndex);\n } else {\n console.warn(\n `[useStepNavigation] Could not find next step for node ${currentNodeId}. Staying on current step.`\n );\n }\n };\n\n // Initialize step from session data or status\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n // Check if session is already ended\n if (sessionStatus === \"ended\") {\n setStepState(100);\n return;\n }\n\n // Only initialize once when initialStep becomes available\n if (initialStep !== undefined && !hasInitialized.current) {\n console.log(\"[useStepNavigation] init — initialStep:\", initialStep);\n setStepState(initialStep);\n setHistory((prev) => {\n // Preserve history if the user already navigated past the initial step\n if (prev.length > 1 && prev[prev.length - 1] === initialStep) {\n console.log(\"[useStepNavigation] init — preserving existing history:\", prev);\n return prev;\n }\n // Reconstruct history by following the graph from step 0\n const reconstructed = template\n ? reconstructHistoryToStep(initialStep, template)\n : initialStep > 0 ? [0, initialStep] : [initialStep];\n console.log(\"[useStepNavigation] init — reconstructed history:\", reconstructed);\n return reconstructed;\n });\n hasInitialized.current = true;\n }\n }, [sessionId, sessionStatus, initialStep]);\n\n const stepObject = {\n setStep,\n goBack,\n goToNextStep,\n step,\n canGoBack: history.length > 1,\n };\n\n return {\n step,\n setStep,\n goBack,\n goToNextStep,\n stepObject,\n };\n};\n"],"names":["useState","useRef","__spreadArray","updateSessionCurrentStep","getOrderedJourneySteps","getNextStepIndex","useEffect","reconstructHistoryToStep"],"mappings":";;;;;;AASA;AACA,IAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;AAErE,IAAM,iBAAiB,GAAG,UAC/B,SAAiB,EACjB,aAAsB,EACtB,WAAoB,EACpB,QAA0B,EAAA;AAEpB,IAAA,IAAA,KAAuBA,cAAQ,CAAC,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAX,WAAW,GAAI,CAAC,CAAC,EAAhD,IAAI,QAAA,EAAE,YAAY,QAA8B;IACjD,IAAA,EAAA,GAAwBA,cAAQ,CAAW,WAAW,KAAK,SAAS,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAA1F,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAuE;AACjG,IAAA,IAAM,cAAc,GAAGC,YAAM,CAAC,KAAK,CAAC;AAEpC,IAAA,IAAM,OAAO,GAAG,UAAC,OAAe,EAAE,WAAmB,EAAA;AAAnB,QAAA,IAAA,WAAA,KAAA,MAAA,EAAA,EAAA,WAAA,GAAA,KAAmB,CAAA,CAAA;AACnD,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAAC,uBAAA,CAAA,EAAA,EAAM,OAAO,QAAE;AACvH,QAAA,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE;YACpC,UAAU,CAAC,UAAC,IAAI,EAAA;gBACd,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO;AAAE,oBAAA,OAAO,IAAI;gBAClD,OAAAA,uBAAA,CAAAA,uBAAA,CAAA,EAAA,EAAW,IAAI,EAAA,IAAA,CAAA,EAAA,CAAE,OAAO,CAAA,EAAA,KAAA,CAAA;AAC1B,YAAA,CAAC,CAAC;QACJ;QACA,YAAY,CAAC,OAAO,CAAC;;QAGrB,IAAI,SAAS,EAAE;YACbC,uCAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,UAAC,KAAK,EAAA;AACvD,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;;AAEpE,YAAA,CAAC,CAAC;QACJ;AACF,IAAA,CAAC;AAED,IAAA,IAAM,MAAM,GAAG,YAAA;QACb,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAAD,uBAAA,CAAA,EAAA,EAAM,OAAO,EAAA,IAAA,CAAA,EAAG,OAAO,EAAE,IAAI,CAAC;AACtE,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,UAAU,GAAAA,uBAAA,CAAA,EAAA,EAAO,OAAO,EAAA,IAAA,CAAC;AAC7B,YAAA,UAAU,CAAC,GAAG,EAAE,CAAC;;YAGjB,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAM,YAAY,GAAGE,qCAAsB,CAAC,QAAQ,CAAC;AACrD,gBAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5B,IAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;;AAEvD,oBAAA,IAAM,SAAS,GAAG,aAAa,GAAG,CAAC;AACnC,oBAAA,IAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC;AAC7C,oBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,aAAb,aAAa,KAAA,MAAA,GAAA,MAAA,GAAb,aAAa,CAAE,IAAI,CAAC;oBACpF,IAAI,aAAa,IAAI,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;wBACjE,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,aAAa,CAAC,IAAI,CAAC;wBACzE,UAAU,CAAC,GAAG,EAAE;oBAClB;yBAAO;wBACL;oBACF;gBACF;YACF;YAEA,IAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC;YACpF,UAAU,CAAC,UAAU,CAAC;AACtB,YAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC7B;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAAF,uBAAA,CAAA,EAAA,EAAM,OAAO,QAAE;QAChF;AACF,IAAA,CAAC;AAED,IAAA,IAAM,YAAY,GAAG,UACnB,aAAqB,EACrB,QAAyB,EACzB,MAAe,EAAA;QAEf,IAAM,aAAa,GAAGG,+BAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;AAEvE,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;YAC1B,OAAO,CAAC,KAAK,CACX,sCAAA,CAAA,MAAA,CAAuC,aAAa,EAAA,iBAAA,CAAA,CAAA,MAAA,CAAkB,aAAa,CAAE,CACtF;YACD,OAAO,CAAC,aAAa,CAAC;QACxB;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CACV,gEAAyD,aAAa,EAAA,4BAAA,CAA4B,CACnG;QACH;AACF,IAAA,CAAC;;AAGD,IAAAC,eAAS,CAAC,YAAA;QACR,IAAI,CAAC,SAAS,EAAE;YACd;QACF;;AAGA,QAAA,IAAI,aAAa,KAAK,OAAO,EAAE;YAC7B,YAAY,CAAC,GAAG,CAAC;YACjB;QACF;;QAGA,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AACxD,YAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,WAAW,CAAC;YACnE,YAAY,CAAC,WAAW,CAAC;YACzB,UAAU,CAAC,UAAC,IAAI,EAAA;;AAEd,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,WAAW,EAAE;AAC5D,oBAAA,OAAO,CAAC,GAAG,CAAC,yDAAyD,EAAE,IAAI,CAAC;AAC5E,oBAAA,OAAO,IAAI;gBACb;;gBAEA,IAAM,aAAa,GAAG;AACpB,sBAAEC,uCAAwB,CAAC,WAAW,EAAE,QAAQ;AAChD,sBAAE,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACtD,gBAAA,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,aAAa,CAAC;AAC/E,gBAAA,OAAO,aAAa;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,cAAc,CAAC,OAAO,GAAG,IAAI;QAC/B;IACF,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AAE3C,IAAA,IAAM,UAAU,GAAG;AACjB,QAAA,OAAO,EAAA,OAAA;AACP,QAAA,MAAM,EAAA,MAAA;AACN,QAAA,YAAY,EAAA,YAAA;AACZ,QAAA,IAAI,EAAA,IAAA;AACJ,QAAA,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;KAC9B;IAED,OAAO;AACL,QAAA,IAAI,EAAA,IAAA;AACJ,QAAA,OAAO,EAAA,OAAA;AACP,QAAA,MAAM,EAAA,MAAA;AACN,QAAA,YAAY,EAAA,YAAA;AACZ,QAAA,UAAU,EAAA,UAAA;KACX;AACH;;;;"}
@@ -10,7 +10,7 @@ var useI18n = require('./useI18n.js');
10
10
 
11
11
  var useUserInputForm = function (_a) {
12
12
  var stepObject = _a.stepObject, setUserInput = _a.setUserInput, initialUserInput = _a.initialUserInput, node = _a.node, template = _a.template, contactInfo = _a.contactInfo, setContactInfo = _a.setContactInfo, onContinueCallback = _a.onContinueCallback;
13
- var setStep = stepObject.setStep, goToNextStep = stepObject.goToNextStep, step = stepObject.step;
13
+ stepObject.setStep; var goBack = stepObject.goBack, goToNextStep = stepObject.goToNextStep, step = stepObject.step;
14
14
  var t = useI18n.useI18n().t;
15
15
  var informationType = React.useMemo(function () {
16
16
  var _a;
@@ -502,7 +502,8 @@ var useUserInputForm = function (_a) {
502
502
  }
503
503
  };
504
504
  var goOnPreviousStep = function () {
505
- setStep(Math.max(0, step - 1));
505
+ console.log("[goOnPreviousStep] called — step:", step, "canGoBack:", stepObject.canGoBack);
506
+ goBack();
506
507
  };
507
508
  var pageTitle = node.pageTitle || formTitles[informationType];
508
509
  var pageDescription = node.pageDescription || formDescriptions[informationType];