datakeen-session-react 1.1.140-dev.25 → 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.
- package/dist/cjs/components/session/UserInputForm/CustomFormFields.js +1 -1
- package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +1 -1
- package/dist/cjs/components/session/UserInputForm/IdentityFields.js +1 -1
- package/dist/cjs/components/session/UserInputForm/IdentityFields.js.map +1 -1
- package/dist/cjs/components/signature-electronic/DocusealSignature.js +2 -1
- package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +1 -1
- package/dist/esm/components/session/UserInputForm/CustomFormFields.js +1 -1
- package/dist/esm/components/session/UserInputForm/CustomFormFields.js.map +1 -1
- package/dist/esm/components/session/UserInputForm/IdentityFields.js +1 -1
- package/dist/esm/components/session/UserInputForm/IdentityFields.js.map +1 -1
- package/dist/esm/components/signature-electronic/DocusealSignature.js +2 -1
- package/dist/esm/components/signature-electronic/DocusealSignature.js.map +1 -1
- 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: "
|
|
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: "
|
|
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
|
-
|
|
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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"}
|
|
@@ -79,7 +79,7 @@ var CustomFormFields = function (_a) {
|
|
|
79
79
|
var dateString = "".concat(newDay, "-").concat(newMonth, "-").concat(newYear);
|
|
80
80
|
onFieldChange(field.id, dateString);
|
|
81
81
|
};
|
|
82
|
-
return (jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsx(Select, { options: DAY_OPTIONS, value: day, onValueChange: function (val) { return handleDateChange_1("day", val); }, placeholder: "
|
|
82
|
+
return (jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsx(Select, { options: 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 }), jsx(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 }), jsx(Select, { options: 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 })] }));
|
|
83
83
|
case "boolean":
|
|
84
84
|
return (jsxs("div", { className: "flex items-center gap-2", children: [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 && (jsx("span", { className: "text-sm text-gray-600", children: field.description }))] }));
|
|
85
85
|
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","_jsxs"],"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","_jsxs"],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ var IdentityFields = function (_a) {
|
|
|
41
41
|
? "border-red-500 bg-red-50"
|
|
42
42
|
: "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.firstName && (jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.first_name_required")] }))] })), requestedFields.has("nom") && (jsxs("div", { className: "space-y-2", children: [jsx(Label.Root, { htmlFor: "lastName", className: "block text-sm md:text-base font-semibold text-gray-900", children: t(FIELD_LABELS.nom) }), 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
|
|
43
43
|
? "border-red-500 bg-red-50"
|
|
44
|
-
: "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.lastName && (jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.last_name_required")] }))] })), requestedFields.has("date_naissance") && (jsxs("div", { className: "space-y-2", children: [jsx(Label.Root, { className: "block text-sm md:text-base font-semibold text-gray-900", children: t(FIELD_LABELS.date_naissance) }), jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsx(Select, { ref: dayRef, options: DAY_OPTIONS, value: form.day || "", onValueChange: handleDayChange, placeholder: "
|
|
44
|
+
: "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.lastName && (jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.last_name_required")] }))] })), requestedFields.has("date_naissance") && (jsxs("div", { className: "space-y-2", children: [jsx(Label.Root, { className: "block text-sm md:text-base font-semibold text-gray-900", children: t(FIELD_LABELS.date_naissance) }), jsxs("div", { className: "grid grid-cols-3 gap-2 md:gap-3", children: [jsx(Select, { ref: dayRef, options: DAY_OPTIONS, value: form.day || "", onValueChange: handleDayChange, placeholder: "JJ", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", pattern: "[0-9]*", maxLength: 2 }), jsx(Select, { ref: monthRef, options: monthOptionsWithTranslation, value: form.month || "", onValueChange: handleMonthChange, placeholder: "MM", error: Boolean(errors.birthDate || errors.notMajor), allowCustomValue: true, inputMode: "numeric", maxLength: 9 }), jsx(Select, { ref: yearRef, options: 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 && (jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.birth_date_required")] })), errors.notMajor && (jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.not_major")] }))] }))] }));
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
export { IdentityFields as default };
|
|
@@ -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":["_jsxs","_jsx"],"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":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -101,7 +101,8 @@ var DocusealSignature = function (_a) {
|
|
|
101
101
|
return (jsxs("div", { className: "flex flex-col items-center justify-center h-full p-4 text-center", children: [jsx("div", { className: "text-red-500 text-4xl mb-4", children: "\u26A0\uFE0F" }), jsx("h2", { className: "text-xl font-bold text-red-600 mb-2", children: t("signature.error_title", "Erreur") }), jsx("p", { className: "text-gray-600 mb-4", children: error || t("signature.generic_error", "Impossible de charger le document.") }), 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") })] }));
|
|
102
102
|
}
|
|
103
103
|
var src = "https://".concat(host, "/s/").concat(token);
|
|
104
|
-
|
|
104
|
+
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 ";
|
|
105
|
+
return (jsx("div", { className: "w-full flex-1 flex flex-col", style: { minHeight: "600px" }, children: jsx(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 }) }));
|
|
105
106
|
};
|
|
106
107
|
|
|
107
108
|
export { DocusealSignature as default };
|
|
@@ -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":["_jsx","_jsxs"],"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":["_jsx","_jsxs"],"mappings":"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"}
|
package/package.json
CHANGED