Refactor phone input handling across onboarding and settings forms

- Replaced PhoneInput component with ControlledPhoneField for better integration with react-hook-form.
- Updated validation for phone numbers using isValidPhone function to ensure proper formatting.
- Removed country code handling from forms, simplifying phone number management.
- Introduced new phone field component with consistent styling and behavior.
- Added phone number validation on the backend using class-validator.
- Removed unused phone utility functions and cleaned up related code.
This commit is contained in:
Marshal
2026-06-21 10:34:40 +00:00
parent 171e02cf7f
commit dc708a2473
25 changed files with 645 additions and 568 deletions

50
pnpm-lock.yaml generated
View File

@@ -107,6 +107,9 @@ importers:
handlebars:
specifier: ^4.7.9
version: 4.7.9
libphonenumber-js:
specifier: ^1.13.6
version: 1.13.6
minio:
specifier: 7.1.3
version: 7.1.3
@@ -349,6 +352,9 @@ importers:
react-hot-toast:
specifier: ^2.6.0
version: 2.6.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
react-phone-number-input:
specifier: ^3.4.17
version: 3.4.17(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
react-router-dom:
specifier: ^6.27.0
version: 6.30.4(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
@@ -5915,6 +5921,9 @@ packages:
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
classnames@2.5.1:
resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
@@ -6200,6 +6209,9 @@ packages:
typescript:
optional: true
country-flag-icons@1.6.17:
resolution: {integrity: sha512-Nmik0289ZVZSI3c7mJR/amg6DyY7Z59b0sTFSKayeX72mHfPzCPJygwJs2pYgQULzuAyWeCUgwAJ+Dq8OR+JFw==}
crc-32@1.2.2:
resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
engines: {node: '>=0.8'}
@@ -7946,6 +7958,17 @@ packages:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
input-format@0.3.14:
resolution: {integrity: sha512-gHMrgrbCgmT4uK5Um5eVDUohuV9lcs95ZUUN9Px2Y0VIfjTzT2wF8Q3Z4fwLFm7c5Z2OXCm53FHoovj6SlOKdg==}
peerDependencies:
react: '>=18.1.0'
react-dom: '>=18.1.0'
peerDependenciesMeta:
react:
optional: true
react-dom:
optional: true
internal-ip@1.2.0:
resolution: {integrity: sha512-DzGfTasXPmwizQP4XV2rR6r2vp8TjlOpMnJqG9Iy2i1pl1lkZdZj5rSpIc7YFGX2nS46PPgAGEyT+Q5hE2FB2g==}
engines: {node: '>=0.10.0'}
@@ -10490,6 +10513,12 @@ packages:
'@types/react':
optional: true
react-phone-number-input@3.4.17:
resolution: {integrity: sha512-1wcjhBAWHgEBAGLi5/XbeZI7Q3aEHNb2z/dHY6R2Gz70TQvu0ZoOT28NTdwtZf4lyRKXWufnTzVhLPBUD8LfmQ==}
peerDependencies:
react: '>=16.8'
react-dom: '>=16.8'
react-redux@9.3.0:
resolution: {integrity: sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==}
peerDependencies:
@@ -19678,6 +19707,8 @@ snapshots:
dependencies:
clsx: 2.1.1
classnames@2.5.1: {}
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
@@ -19944,6 +19975,8 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
country-flag-icons@1.6.17: {}
crc-32@1.2.2: {}
crc32-stream@4.0.3:
@@ -22131,6 +22164,13 @@ snapshots:
ini@4.1.1: {}
input-format@0.3.14(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
dependencies:
prop-types: 15.8.1
optionalDependencies:
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
internal-ip@1.2.0:
dependencies:
meow: 3.7.0
@@ -25075,6 +25115,16 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.31
react-phone-number-input@3.4.17(react-dom@19.2.6(react@19.2.6))(react@19.2.6):
dependencies:
classnames: 2.5.1
country-flag-icons: 1.6.17
input-format: 0.3.14(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
libphonenumber-js: 1.13.6
prop-types: 15.8.1
react: 19.2.6
react-dom: 19.2.6(react@19.2.6)
react-redux@9.3.0(@types/react@18.3.31)(react@19.2.6)(redux@5.0.1):
dependencies:
'@types/use-sync-external-store': 0.0.6