@gusto/embedded-react-sdk 0.57.2 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/dist/components/Common/DataView/DataCards/DataCards.js +98 -66
  3. package/dist/components/Common/DataView/DataCards/DataCards.js.map +1 -1
  4. package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js +11 -9
  5. package/dist/components/Common/DataView/DataCards/DataCards.module.scss.js.map +1 -1
  6. package/dist/components/Common/DataView/DataTable/DataTable.js +86 -75
  7. package/dist/components/Common/DataView/DataTable/DataTable.js.map +1 -1
  8. package/dist/components/Common/DataView/DataView.js.map +1 -1
  9. package/dist/components/Common/DataView/getSortControls.js +22 -0
  10. package/dist/components/Common/DataView/getSortControls.js.map +1 -0
  11. package/dist/components/Common/DataView/useDataView.js +30 -24
  12. package/dist/components/Common/DataView/useDataView.js.map +1 -1
  13. package/dist/components/Common/DateRangeFilter/DateRangeFilter.js +32 -32
  14. package/dist/components/Common/DateRangeFilter/DateRangeFilter.js.map +1 -1
  15. package/dist/components/Common/OnboardingStatusBadge/index.js.map +1 -1
  16. package/dist/components/Common/UI/Table/Table.js +65 -25
  17. package/dist/components/Common/UI/Table/Table.js.map +1 -1
  18. package/dist/components/Common/UI/Table/Table.module.scss.js +8 -4
  19. package/dist/components/Common/UI/Table/Table.module.scss.js.map +1 -1
  20. package/dist/components/Common/UI/Table/TableTypes.js.map +1 -1
  21. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +3 -4
  22. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  23. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +3 -4
  24. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  25. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +5 -6
  26. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  27. package/dist/components/Company/BankAccount/BankAccountForm/context.js +3 -4
  28. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  29. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +3 -4
  30. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  31. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +5 -6
  32. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  33. package/dist/components/Company/Industry/Context.js +6 -7
  34. package/dist/components/Company/Industry/Context.js.map +1 -1
  35. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +3 -4
  36. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  37. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +3 -4
  38. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  39. package/dist/components/Company/OnboardingOverview/context.js +3 -4
  40. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  41. package/dist/components/Company/PaySchedule/PaySchedule.js +30 -45
  42. package/dist/components/Company/PaySchedule/PaySchedule.js.map +1 -1
  43. package/dist/components/Company/PaySchedule/PayScheduleComponents.js +11 -12
  44. package/dist/components/Company/PaySchedule/PayScheduleComponents.js.map +1 -1
  45. package/dist/components/Company/PaySchedule/management/AutoPilotDialog/AutoPilotDialog.js.map +1 -1
  46. package/dist/components/Company/PaySchedule/management/AutoPilotDialog/useAutoPilotDialog.js.map +1 -1
  47. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.js +34 -14
  48. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.js.map +1 -1
  49. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentDepartmentStepPresentation.js +106 -0
  50. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentDepartmentStepPresentation.js.map +1 -0
  51. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentEmployeeStepPresentation.js +136 -0
  52. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentEmployeeStepPresentation.js.map +1 -0
  53. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js +38 -20
  54. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.js.map +1 -1
  55. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js +78 -44
  56. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.js.map +1 -1
  57. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js +45 -37
  58. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.js.map +1 -1
  59. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js +244 -95
  60. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.js.map +1 -1
  61. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/departmentAccess.js +22 -0
  62. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/departmentAccess.js.map +1 -0
  63. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/employeeJob.js +13 -0
  64. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/employeeJob.js.map +1 -0
  65. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js +48 -43
  66. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/payScheduleAssignmentStateMachine.js.map +1 -1
  67. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.js.map +1 -1
  68. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/useAssignableEmployees.js +57 -0
  69. package/dist/components/Company/PaySchedule/management/PayScheduleAssignment/useAssignableEmployees.js.map +1 -0
  70. package/dist/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.js.map +1 -1
  71. package/dist/components/Company/PaySchedule/management/PayScheduleDepartmentOverviewPresentation.js +83 -0
  72. package/dist/components/Company/PaySchedule/management/PayScheduleDepartmentOverviewPresentation.js.map +1 -0
  73. package/dist/components/Company/PaySchedule/management/PayScheduleEmployeeOverviewPresentation.js +84 -0
  74. package/dist/components/Company/PaySchedule/management/PayScheduleEmployeeOverviewPresentation.js.map +1 -0
  75. package/dist/components/Company/PaySchedule/management/PayScheduleManagementComponents.js.map +1 -1
  76. package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js +109 -39
  77. package/dist/components/Company/PaySchedule/management/PayScheduleOverview.js.map +1 -1
  78. package/dist/components/Company/PaySchedule/management/PayScheduleOverviewPresentation.js.map +1 -1
  79. package/dist/components/Company/PaySchedule/management/payScheduleManagementStateMachine.js.map +1 -1
  80. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js.map +1 -1
  81. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.js.map +1 -1
  82. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js +78 -83
  83. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js.map +1 -1
  84. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +3 -4
  85. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  86. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +3 -4
  87. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  88. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +3 -4
  89. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
  90. package/dist/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.js +5 -5
  91. package/dist/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.js.map +1 -1
  92. package/dist/components/Contractor/Address/shared/useContractorAddressSummary/useContractorAddressSummary.js +1 -1
  93. package/dist/components/Contractor/Address/shared/useContractorAddressSummary/useContractorAddressSummary.js.map +1 -1
  94. package/dist/components/Contractor/Compensation/management/CompensationEditForm.js +45 -54
  95. package/dist/components/Contractor/Compensation/management/CompensationEditForm.js.map +1 -1
  96. package/dist/components/Contractor/Compensation/shared/useContractorCompensationSummary/useContractorCompensationSummary.js +4 -4
  97. package/dist/components/Contractor/Compensation/shared/useContractorCompensationSummary/useContractorCompensationSummary.js.map +1 -1
  98. package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js +17 -22
  99. package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js.map +1 -1
  100. package/dist/components/Contractor/Compensation/shared/useContractorPayForm/useContractorPayForm.js +3 -3
  101. package/dist/components/Contractor/Compensation/shared/useContractorPayForm/useContractorPayForm.js.map +1 -1
  102. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js +1 -0
  103. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js.map +1 -1
  104. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js +122 -113
  105. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js.map +1 -1
  106. package/dist/components/Contractor/ContractorList/shared/useContractorList.js +63 -54
  107. package/dist/components/Contractor/ContractorList/shared/useContractorList.js.map +1 -1
  108. package/dist/components/Contractor/Dashboard/Dashboard.js +20 -20
  109. package/dist/components/Contractor/Dashboard/Dashboard.js.map +1 -1
  110. package/dist/components/Contractor/Dismissal/useDismissal/useDismissal.js +10 -10
  111. package/dist/components/Contractor/Dismissal/useDismissal/useDismissal.js.map +1 -1
  112. package/dist/components/Contractor/Landing/Landing.js +43 -39
  113. package/dist/components/Contractor/Landing/Landing.js.map +1 -1
  114. package/dist/components/Contractor/NewHireReport/NewHireReport.js +3 -3
  115. package/dist/components/Contractor/NewHireReport/NewHireReport.js.map +1 -1
  116. package/dist/components/Contractor/PaymentMethod/onboarding/PaymentMethod.js +39 -48
  117. package/dist/components/Contractor/PaymentMethod/onboarding/PaymentMethod.js.map +1 -1
  118. package/dist/components/Contractor/Payments/CreateHistoricalPayment/CreateHistoricalPayment.js +1 -1
  119. package/dist/components/Contractor/Payments/CreateHistoricalPayment/CreateHistoricalPayment.js.map +1 -1
  120. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js +10 -10
  121. package/dist/components/Contractor/Payments/CreatePayment/CreatePayment.js.map +1 -1
  122. package/dist/components/Contractor/Payments/HistoricalPaymentSummary/HistoricalPaymentSummary.js +4 -4
  123. package/dist/components/Contractor/Payments/HistoricalPaymentSummary/HistoricalPaymentSummary.js.map +1 -1
  124. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js +8 -8
  125. package/dist/components/Contractor/Payments/PaymentHistory/PaymentHistory.js.map +1 -1
  126. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js +5 -5
  127. package/dist/components/Contractor/Payments/PaymentStatement/PaymentStatement.js.map +1 -1
  128. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js +3 -3
  129. package/dist/components/Contractor/Payments/PaymentSummary/PaymentSummary.js.map +1 -1
  130. package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js +76 -69
  131. package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js.map +1 -1
  132. package/dist/components/Contractor/Profile/onboarding/SelfOnboardingContractorProfile.js +1 -1
  133. package/dist/components/Contractor/Profile/onboarding/SelfOnboardingContractorProfile.js.map +1 -1
  134. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js +27 -29
  135. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js.map +1 -1
  136. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js +15 -13
  137. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js.map +1 -1
  138. package/dist/components/Contractor/Profile/shared/useContractorProfileSummary/useContractorProfileSummary.js +1 -1
  139. package/dist/components/Contractor/Profile/shared/useContractorProfileSummary/useContractorProfileSummary.js.map +1 -1
  140. package/dist/components/Contractor/SelfOnboardingFlow/SelfOnboardingComponents.js +2 -9
  141. package/dist/components/Contractor/SelfOnboardingFlow/SelfOnboardingComponents.js.map +1 -1
  142. package/dist/components/Contractor/Submit/Submit.js +18 -18
  143. package/dist/components/Contractor/Submit/Submit.js.map +1 -1
  144. package/dist/components/Contractor/shared/SelectContractors/useSelectContractors.js +6 -6
  145. package/dist/components/Contractor/shared/SelectContractors/useSelectContractors.js.map +1 -1
  146. package/dist/components/Contractor/shared/hourlyRate.js +14 -0
  147. package/dist/components/Contractor/shared/hourlyRate.js.map +1 -0
  148. package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js +63 -63
  149. package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js.map +1 -1
  150. package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js +25 -25
  151. package/dist/components/Employee/Compensation/shared/useCompensationForm/useCompensationForm.js.map +1 -1
  152. package/dist/components/Employee/Compensation/shared/useCompensationManagement/useCompensationManagement.js +15 -15
  153. package/dist/components/Employee/Compensation/shared/useCompensationManagement/useCompensationManagement.js.map +1 -1
  154. package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js +1 -1
  155. package/dist/components/Employee/Compensation/shared/useJobForm/useJobForm.js.map +1 -1
  156. package/dist/components/Employee/Dashboard/Dashboard.js +25 -25
  157. package/dist/components/Employee/Dashboard/Dashboard.js.map +1 -1
  158. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +3 -4
  159. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  160. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js +7 -7
  161. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentSigner.js.map +1 -1
  162. package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js +1 -1
  163. package/dist/components/Employee/Documents/onboarding/EmployeeDocuments/EmployeeDocuments.js.map +1 -1
  164. package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js +6 -6
  165. package/dist/components/Employee/HomeAddress/management/useHomeAddressManagement.js.map +1 -1
  166. package/dist/components/Employee/Landing/Landing.js +37 -33
  167. package/dist/components/Employee/Landing/Landing.js.map +1 -1
  168. package/dist/components/Employee/OnboardingSummary/OnboardingSummary.js +27 -27
  169. package/dist/components/Employee/OnboardingSummary/OnboardingSummary.js.map +1 -1
  170. package/dist/components/Employee/PaymentMethod/onboarding/ListView.js +65 -74
  171. package/dist/components/Employee/PaymentMethod/onboarding/ListView.js.map +1 -1
  172. package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/useEmployeeDetailsForm.js +6 -6
  173. package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/useEmployeeDetailsForm.js.map +1 -1
  174. package/dist/components/Employee/Profile/shared/useEmployeeProfileSummary/useEmployeeProfileSummary.js +1 -1
  175. package/dist/components/Employee/Profile/shared/useEmployeeProfileSummary/useEmployeeProfileSummary.js.map +1 -1
  176. package/dist/components/Employee/SelfOnboardingFlow/SelfOnboardingComponents.js +8 -15
  177. package/dist/components/Employee/SelfOnboardingFlow/SelfOnboardingComponents.js.map +1 -1
  178. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js +11 -11
  179. package/dist/components/Employee/Terminations/TerminateEmployee/TerminateEmployee.js.map +1 -1
  180. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js +12 -12
  181. package/dist/components/Employee/Terminations/TerminationSummary/TerminationSummary.js.map +1 -1
  182. package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js +26 -26
  183. package/dist/components/Employee/WorkAddress/management/useWorkAddressManagement.js.map +1 -1
  184. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js +16 -16
  185. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js.map +1 -1
  186. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +2 -3
  187. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
  188. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +84 -82
  189. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  190. package/dist/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.js +8 -0
  191. package/dist/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.js.map +1 -0
  192. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +97 -92
  193. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
  194. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js +1 -1
  195. package/dist/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.js.map +1 -1
  196. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +18 -18
  197. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
  198. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +146 -134
  199. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  200. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.module.scss.js +14 -12
  201. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.module.scss.js.map +1 -1
  202. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +34 -33
  203. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
  204. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js +49 -48
  205. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js.map +1 -1
  206. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js +1 -1
  207. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.js.map +1 -1
  208. package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
  209. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +0 -4
  210. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
  211. package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
  212. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js +51 -38
  213. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
  214. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js +121 -102
  215. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
  216. package/dist/components/Payroll/PayrollHistory/PayrollHistory.js.map +1 -1
  217. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js +6 -6
  218. package/dist/components/Payroll/PayrollHistory/PayrollHistoryPresentation.js.map +1 -1
  219. package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
  220. package/dist/components/Payroll/PayrollList/PayrollList.js +79 -74
  221. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  222. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js +9 -9
  223. package/dist/components/Payroll/PayrollList/PayrollListPresentation.js.map +1 -1
  224. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +92 -83
  225. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  226. package/dist/components/Payroll/PayrollOverview/PayrollOverviewPresentation.js.map +1 -1
  227. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +23 -27
  228. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
  229. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +82 -75
  230. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
  231. package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.js +416 -0
  232. package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.js.map +1 -0
  233. package/dist/components/Payroll/{UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js → RropPayrollEditEmployee/RropPayrollEditEmployee.module.scss.js} +1 -1
  234. package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.module.scss.js.map +1 -0
  235. package/dist/components/Payroll/TransitionConfiguration/TransitionConfiguration.js +97 -0
  236. package/dist/components/Payroll/TransitionConfiguration/TransitionConfiguration.js.map +1 -0
  237. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.js +106 -0
  238. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.js.map +1 -0
  239. package/dist/components/Payroll/{TransitionCreation/TransitionCreationPresentation.module.scss.js → TransitionConfiguration/TransitionConfigurationPresentation.module.scss.js} +1 -1
  240. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.module.scss.js.map +1 -0
  241. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.js +10 -0
  242. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.js.map +1 -0
  243. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js +86 -64
  244. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
  245. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js +126 -77
  246. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js.map +1 -1
  247. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.module.scss.js +8 -0
  248. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.module.scss.js.map +1 -0
  249. package/dist/components/Payroll/helpers.js +1 -1
  250. package/dist/components/Payroll/helpers.js.map +1 -1
  251. package/dist/components/Payroll/index.js +16 -20
  252. package/dist/components/Payroll/index.js.map +1 -1
  253. package/dist/components/Payroll/payrollTypes.js +1 -1
  254. package/dist/components/Payroll/payrollTypes.js.map +1 -1
  255. package/dist/components/Payroll/usePreparedPayrollData.js +2 -3
  256. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  257. package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js +11 -14
  258. package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js.map +1 -1
  259. package/dist/contexts/ApiProvider/ApiProvider.js +18 -17
  260. package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
  261. package/dist/contexts/ApiProvider/payScheduleCustomNameHook.js +31 -0
  262. package/dist/contexts/ApiProvider/payScheduleCustomNameHook.js.map +1 -0
  263. package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js +1 -1
  264. package/dist/contexts/ApiProvider/payrollOffCycleReasonEnumHook.js.map +1 -1
  265. package/dist/contexts/FeaturesProvider/FeaturesProvider.js +14 -0
  266. package/dist/contexts/FeaturesProvider/FeaturesProvider.js.map +1 -0
  267. package/dist/contexts/FeaturesProvider/useFeature.js +7 -0
  268. package/dist/contexts/FeaturesProvider/useFeature.js.map +1 -0
  269. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +32 -30
  270. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
  271. package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
  272. package/dist/i18n/I18n.js +2 -3
  273. package/dist/i18n/I18n.js.map +1 -1
  274. package/dist/i18n/en/Company.Management.PaySchedule.json.js +31 -13
  275. package/dist/i18n/en/Company.Management.PaySchedule.json.js.map +1 -1
  276. package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js +20 -12
  277. package/dist/i18n/en/Company.Management.PayScheduleAssignment.json.js.map +1 -1
  278. package/dist/i18n/en/Contractor.Profile.json.js +1 -1
  279. package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js +29 -23
  280. package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js.map +1 -1
  281. package/dist/i18n/en/Payroll.PayrollHistory.json.js +1 -1
  282. package/dist/i18n/en/Payroll.PayrollLanding.json.js +1 -1
  283. package/dist/i18n/en/Payroll.PayrollList.json.js +5 -5
  284. package/dist/i18n/en/{Payroll.UNSTABLE_PayrollEditEmployee.json.js → Payroll.RropPayrollEditEmployee.json.js} +42 -38
  285. package/dist/i18n/en/Payroll.RropPayrollEditEmployee.json.js.map +1 -0
  286. package/dist/i18n/en/Payroll.TransitionConfiguration.json.js +28 -0
  287. package/dist/i18n/en/Payroll.TransitionConfiguration.json.js.map +1 -0
  288. package/dist/i18n/en/Payroll.TransitionPayrollAlert.json.js +16 -12
  289. package/dist/i18n/en/Payroll.TransitionPayrollAlert.json.js.map +1 -1
  290. package/dist/i18n/en/common.json.js +1 -1
  291. package/dist/package.json.js +1 -1
  292. package/dist/partner-hook-utils/form/composeSubmitHandler.js +55 -48
  293. package/dist/partner-hook-utils/form/composeSubmitHandler.js.map +1 -1
  294. package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js +31 -29
  295. package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js.map +1 -1
  296. package/dist/shared/constants.js +7 -6
  297. package/dist/shared/constants.js.map +1 -1
  298. package/dist/src/components/Common/DataView/DataCards/DataCards.d.ts +3 -1
  299. package/dist/src/components/Common/DataView/DataTable/DataTable.d.ts +3 -1
  300. package/dist/src/components/Common/DataView/DataView.d.ts +2 -0
  301. package/dist/src/components/Common/DataView/getSortControls.d.ts +24 -0
  302. package/dist/src/components/Common/DataView/useDataView.d.ts +22 -1
  303. package/dist/src/components/Common/DateRangeFilter/DateRangeFilter.d.ts +2 -2
  304. package/dist/src/components/Common/OnboardingStatusBadge/index.d.ts +1 -1
  305. package/dist/src/components/Common/UI/Table/TableTypes.d.ts +71 -2
  306. package/dist/src/components/Company/PaySchedule/PaySchedule.d.ts +1 -9
  307. package/dist/src/components/Company/PaySchedule/PayScheduleComponents.d.ts +0 -1
  308. package/dist/src/components/Company/PaySchedule/management/AutoPilotDialog/AutoPilotDialog.d.ts +1 -1
  309. package/dist/src/components/Company/PaySchedule/management/AutoPilotDialog/useAutoPilotDialog.d.ts +1 -1
  310. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentCompensationStepPresentation.d.ts +10 -3
  311. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentDepartmentStepPresentation.d.ts +21 -0
  312. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentEmployeeStepPresentation.d.ts +34 -0
  313. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentScheduleStepPresentation.d.ts +9 -3
  314. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/AssignmentTypeStepPresentation.d.ts +5 -1
  315. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignment.d.ts +10 -10
  316. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/PayScheduleAssignmentComponents.d.ts +12 -4
  317. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/departmentAccess.d.ts +19 -0
  318. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/employeeJob.d.ts +17 -0
  319. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/scheduleLabel.d.ts +1 -1
  320. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/useAssignableEmployees.d.ts +34 -0
  321. package/dist/src/components/Company/PaySchedule/management/PayScheduleAssignment/usePayScheduleAssignment.d.ts +16 -3
  322. package/dist/src/components/Company/PaySchedule/management/PayScheduleCompensationOverviewPresentation.d.ts +1 -1
  323. package/dist/src/components/Company/PaySchedule/management/PayScheduleDepartmentOverviewPresentation.d.ts +23 -0
  324. package/dist/src/components/Company/PaySchedule/management/PayScheduleEmployeeOverviewPresentation.d.ts +25 -0
  325. package/dist/src/components/Company/PaySchedule/management/PayScheduleManagementComponents.d.ts +1 -1
  326. package/dist/src/components/Company/PaySchedule/management/PayScheduleOverviewPresentation.d.ts +1 -1
  327. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/fields.d.ts +1 -1
  328. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.d.ts +1 -1
  329. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.d.ts +4 -15
  330. package/dist/src/components/Contractor/ContractorList/management/ManagementContractorListView.d.ts +2 -2
  331. package/dist/src/components/Contractor/ContractorList/shared/index.d.ts +1 -1
  332. package/dist/src/components/Contractor/ContractorList/shared/useContractorList.d.ts +38 -0
  333. package/dist/src/components/Contractor/Landing/Landing.d.ts +5 -2
  334. package/dist/src/components/Contractor/shared/hourlyRate.d.ts +23 -0
  335. package/dist/src/components/Employee/Landing/Landing.d.ts +5 -2
  336. package/dist/src/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.d.ts +9 -0
  337. package/dist/src/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.d.ts +1 -1
  338. package/dist/src/components/Payroll/PayrollConfiguration/usePayrollConfigurationData.d.ts +1 -1
  339. package/dist/src/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.d.ts +1 -1
  340. package/dist/src/components/Payroll/PayrollEditEmployee/TimeOffField.d.ts +3 -1
  341. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.d.ts +2 -0
  342. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/usePayrollEditEmployeeForm.d.ts +2 -2
  343. package/dist/src/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +8 -6
  344. package/dist/src/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.d.ts +0 -8
  345. package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +5 -3
  346. package/dist/src/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +2 -3
  347. package/dist/src/components/Payroll/PayrollFlow/payrollStateMachine.d.ts +1 -1
  348. package/dist/src/components/Payroll/PayrollHistory/PayrollHistoryPresentation.d.ts +1 -1
  349. package/dist/src/components/Payroll/PayrollLanding/PayrollLanding.d.ts +18 -5
  350. package/dist/src/components/Payroll/PayrollList/PayrollList.d.ts +11 -5
  351. package/dist/src/components/Payroll/PayrollList/PayrollListPresentation.d.ts +2 -2
  352. package/dist/src/components/Payroll/PayrollOverview/PayrollOverviewPresentation.d.ts +1 -1
  353. package/dist/src/components/Payroll/{UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.d.ts → RropPayrollEditEmployee/RropPayrollEditEmployee.d.ts} +9 -5
  354. package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfiguration.d.ts +55 -0
  355. package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.d.ts +9 -0
  356. package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.d.ts +52 -0
  357. package/dist/src/components/Payroll/TransitionConfiguration/index.d.ts +2 -0
  358. package/dist/src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.d.ts +5 -2
  359. package/dist/src/components/Payroll/helpers.d.ts +2 -2
  360. package/dist/src/components/Payroll/index.d.ts +2 -6
  361. package/dist/src/components/Payroll/usePreparedPayrollData.d.ts +2 -2
  362. package/dist/src/contexts/ApiProvider/payScheduleCustomNameHook.d.ts +14 -0
  363. package/dist/src/contexts/ApiProvider/payScheduleCustomNameHook.test.d.ts +1 -0
  364. package/dist/src/contexts/ComponentAdapter/componentAdapterTypes.d.ts +1 -1
  365. package/dist/src/contexts/FeaturesProvider/FeaturesProvider.d.ts +21 -0
  366. package/dist/src/contexts/FeaturesProvider/useFeature.d.ts +53 -0
  367. package/dist/src/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +3 -0
  368. package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +38 -10
  369. package/dist/src/contexts/index.d.ts +1 -0
  370. package/dist/src/i18n/en/common.json.d.ts +5 -1
  371. package/dist/src/i18n/types.d.ts +195 -70
  372. package/dist/src/models/external.d.ts +63 -48
  373. package/dist/src/partner-hook-utils/form/fields/RadioGroupHookField.d.ts +9 -7
  374. package/dist/src/shared/constants.d.ts +5 -3
  375. package/dist/src/test-utils/renderWithProviders.d.ts +2 -0
  376. package/dist/style.css +1 -1
  377. package/docs/guides/endpoint-inventory.json +57 -40
  378. package/package.json +23 -22
  379. package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js +0 -29
  380. package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js.map +0 -1
  381. package/dist/components/Payroll/Transition/TransitionFlow.js +0 -60
  382. package/dist/components/Payroll/Transition/TransitionFlow.js.map +0 -1
  383. package/dist/components/Payroll/Transition/TransitionFlowComponents.js +0 -31
  384. package/dist/components/Payroll/Transition/TransitionFlowComponents.js.map +0 -1
  385. package/dist/components/Payroll/Transition/transitionStateMachine.js +0 -49
  386. package/dist/components/Payroll/Transition/transitionStateMachine.js.map +0 -1
  387. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js +0 -100
  388. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +0 -1
  389. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js +0 -110
  390. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js.map +0 -1
  391. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.module.scss.js.map +0 -1
  392. package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js +0 -21
  393. package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js.map +0 -1
  394. package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js +0 -48
  395. package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js.map +0 -1
  396. package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js +0 -35
  397. package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js.map +0 -1
  398. package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js +0 -23
  399. package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js.map +0 -1
  400. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +0 -29
  401. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +0 -1
  402. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +0 -411
  403. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +0 -1
  404. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +0 -1
  405. package/dist/i18n/en/Payroll.Transition.json.js +0 -8
  406. package/dist/i18n/en/Payroll.Transition.json.js.map +0 -1
  407. package/dist/i18n/en/Payroll.TransitionCreation.json.js +0 -26
  408. package/dist/i18n/en/Payroll.TransitionCreation.json.js.map +0 -1
  409. package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js.map +0 -1
  410. package/dist/src/components/Payroll/PayrollFlow/TransitionFlowContextual.d.ts +0 -7
  411. package/dist/src/components/Payroll/Transition/TransitionFlow.d.ts +0 -55
  412. package/dist/src/components/Payroll/Transition/TransitionFlowComponents.d.ts +0 -52
  413. package/dist/src/components/Payroll/Transition/index.d.ts +0 -2
  414. package/dist/src/components/Payroll/Transition/transitionStateMachine.d.ts +0 -29
  415. package/dist/src/components/Payroll/TransitionCreation/TransitionCreation.d.ts +0 -22
  416. package/dist/src/components/Payroll/TransitionCreation/TransitionCreationPresentation.d.ts +0 -9
  417. package/dist/src/components/Payroll/TransitionCreation/TransitionCreationTypes.d.ts +0 -57
  418. package/dist/src/components/Payroll/TransitionCreation/index.d.ts +0 -2
  419. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayroll.d.ts +0 -55
  420. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollComponents.d.ts +0 -24
  421. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollTypes.d.ts +0 -23
  422. package/dist/src/components/Payroll/TransitionPayroll/index.d.ts +0 -2
  423. package/dist/src/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.d.ts +0 -15
  424. package/dist/src/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.d.ts +0 -28
  425. /package/dist/src/components/{Payroll/Transition/transitionStateMachine.test.d.ts → Common/DataView/getSortControls.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ContractorProfile.js","sources":["../../../../../src/components/Contractor/Profile/onboarding/ContractorProfile.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWatch } from 'react-hook-form'\nimport { type Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport classNames from 'classnames'\nimport {\n useContractorDetailsForm,\n ContractorType,\n type ContractorDetailsFormData,\n type ContractorDetailsOptionalFieldsToRequire,\n type UseContractorDetailsFormReady,\n} from '../shared/useContractorDetailsForm'\nimport { SelfOnboardingContractorProfile } from './SelfOnboardingContractorProfile'\nimport styles from './ContractorProfile.module.scss'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseBoundaries, BaseLayout } from '@/components/Base'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport { Form } from '@/components/Common/Form'\nimport { Flex, Grid } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { useComponentDictionary } from '@/i18n/I18n'\nimport { componentEvents, ContractorOnboardingStatus } from '@/shared/constants'\nimport { useContractorHasSignedW9 } from '@/components/Contractor/shared/useContractorHasSignedW9'\nimport type { LoaderComponentType } from '@/components/Base'\n\n// Once the contractor has finished self-onboarding (or the record is otherwise\n// under admin review / completed), the admin needs to view and edit SSN/EIN even\n// though the self-onboarding toggle stays on. Mirrors the Employee AdminProfile\n// `checkHasCompletedSelfOnboarding` override.\nfunction hasCompletedSelfOnboarding(contractor?: Contractor | null): boolean {\n return (\n contractor?.onboarded === true ||\n contractor?.onboardingStatus === ContractorOnboardingStatus.ONBOARDING_COMPLETED ||\n contractor?.onboardingStatus === ContractorOnboardingStatus.SELF_ONBOARDING_REVIEW ||\n contractor?.onboardingStatus === ContractorOnboardingStatus.ADMIN_ONBOARDING_REVIEW\n )\n}\n\n// The admin form restores the contractor profile's product requiredness on top\n// of the hook's API-aligned baseline (which leaves ssn/ein optional and\n// create-only fields optional on update). When the admin invites the contractor\n// to self-onboard, SSN/EIN are hidden and the contractor supplies them later, so\n// they are dropped from the required set. An SSN/EIN already on file is still\n// waived via redaction, so promoting them when not inviting is safe.\nfunction computeRequiredFields(\n selfOnboardingActive: boolean,\n): ContractorDetailsOptionalFieldsToRequire {\n const base: ContractorDetailsOptionalFieldsToRequire = {\n create: [],\n update: ['firstName', 'lastName', 'businessName', 'hourlyRate', 'workState'],\n }\n if (selfOnboardingActive) return base\n return {\n create: [...(base.create ?? []), 'ssn', 'ein'],\n update: [...(base.update ?? []), 'ssn', 'ein'],\n }\n}\n\n/**\n * Props for {@link ContractorProfile} in admin mode.\n *\n * @remarks\n * Renders the admin create/edit form. When `contractorId` is omitted, the form\n * creates a new contractor under `companyId`. When provided, it fetches and\n * updates the existing contractor.\n *\n * @public\n */\nexport interface ContractorProfileAdminProps extends BaseComponentInterface<'Contractor.Profile'> {\n /** UUID of the company the contractor belongs to. */\n companyId: string\n /** Initial values for the contractor profile form fields. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When `true` (the default), renders the admin create/edit form. */\n isAdmin?: true\n /** UUID of an existing contractor to edit. When omitted, the form creates a new contractor. */\n contractorId?: string\n}\n\n/**\n * Props for {@link ContractorProfile} in self-onboarding mode.\n *\n * @remarks\n * Renders the contractor self-onboarding profile. The contractor must already\n * exist so its type (individual vs. business) can be resolved to determine\n * which fields to display.\n *\n * @public\n */\nexport interface ContractorProfileSelfOnboardingProps extends BaseComponentInterface<'Contractor.Profile'> {\n /** UUID of the company the contractor belongs to. */\n companyId: string\n /** Initial values for the contractor profile form fields. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When `false`, renders the contractor self-onboarding profile. */\n isAdmin: false\n /** UUID of the existing contractor completing self-onboarding. Required in self-onboarding mode. */\n contractorId: string\n}\n\n/**\n * Props for {@link ContractorProfile}.\n *\n * @remarks\n * Discriminated by `isAdmin`. See {@link ContractorProfileAdminProps} and\n * {@link ContractorProfileSelfOnboardingProps} for the specific prop shapes.\n *\n * @public\n */\nexport type ContractorProfileProps =\n ContractorProfileAdminProps | ContractorProfileSelfOnboardingProps\n\n/**\n * Form for creating or editing a contractor profile, supporting both individual and business contractor types.\n *\n * @remarks\n * In admin mode (the default), renders different field sets depending on the contractor type (individual\n * vs. business) and wage type (hourly vs. fixed), and exposes a self-onboarding toggle that invites the\n * contractor to complete their own setup. When `contractorId` is provided, the form fetches the existing\n * contractor and updates it on submit; otherwise it creates a new contractor under `companyId`.\n *\n * When `isAdmin` is `false`, renders the contractor self-onboarding profile instead: it resolves the\n * existing contractor's type and presents the individual (name + SSN) or business (business name + EIN)\n * fields for the contractor to complete.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `contractor/created` | A new contractor was created successfully. | The created contractor entity |\n * | `contractor/updated` | An existing contractor was updated successfully. | The updated contractor entity |\n * | `contractor/profile/done` | The contractor profile step finished. | `{ contractorId: string, onboardingStatus?: string, selfOnboarding: boolean }` |\n *\n * @param props - See {@link ContractorProfileProps}.\n * @returns The rendered contractor profile form.\n * @public\n */\nexport function ContractorProfile(props: ContractorProfileProps) {\n useComponentDictionary('Contractor.Profile', props.dictionary)\n return (\n <BaseBoundaries\n componentName=\"Contractor.Profile\"\n FallbackComponent={props.FallbackComponent}\n LoaderComponent={props.LoaderComponent}\n >\n {props.isAdmin === false ? (\n <SelfOnboardingContractorProfile\n contractorId={props.contractorId}\n onEvent={props.onEvent}\n className={props.className}\n LoaderComponent={props.LoaderComponent}\n />\n ) : (\n <ContractorProfileRoot {...props} />\n )}\n </BaseBoundaries>\n )\n}\n\nfunction ContractorProfileW9Warning({ contractorId }: { contractorId: string }) {\n const hasSignedW9 = useContractorHasSignedW9(contractorId)\n const { t } = useTranslation('Contractor.Profile')\n const Components = useComponentContext()\n if (!hasSignedW9) return null\n return (\n <Components.Alert status=\"warning\" disableScrollIntoView label={t('w9EditWarning.label')}>\n <Components.Text>{t('w9EditWarning.body')}</Components.Text>\n </Components.Alert>\n )\n}\n\nfunction ContractorProfileRoot({\n companyId,\n contractorId,\n defaultValues,\n className,\n onEvent,\n LoaderComponent,\n}: ContractorProfileProps) {\n useI18n('Contractor.Profile')\n\n const resolvedDefaults = useMemo<Partial<ContractorDetailsFormData>>(\n () => ({ type: ContractorType.Business, ...defaultValues }),\n [defaultValues],\n )\n\n // Mirrors the Employee AdminProfile loop: SSN/EIN requiredness depends on the\n // self-onboarding toggle, which lives in the form the hook creates. Seed from\n // the create-mode default, then sync from the watched value (see the ready child).\n const [selfOnboardingActive, setSelfOnboardingActive] = useState(\n !contractorId && (resolvedDefaults.selfOnboarding ?? false),\n )\n\n const optionalFieldsToRequire = useMemo(\n () => computeRequiredFields(selfOnboardingActive),\n [selfOnboardingActive],\n )\n\n const contractor = useContractorDetailsForm(\n contractorId\n ? {\n companyId,\n contractorId,\n defaultValues: resolvedDefaults,\n optionalFieldsToRequire,\n }\n : {\n companyId,\n defaultValues: resolvedDefaults,\n optionalFieldsToRequire,\n },\n )\n\n if (contractor.isLoading) {\n return (\n <BaseLayout\n isLoading\n error={contractor.errorHandling.errors}\n LoaderComponent={LoaderComponent}\n />\n )\n }\n\n return (\n <ContractorProfileReady\n contractor={contractor}\n onEvent={onEvent}\n className={className}\n setSelfOnboardingActive={setSelfOnboardingActive}\n LoaderComponent={LoaderComponent}\n />\n )\n}\n\ninterface ContractorProfileReadyProps {\n contractor: UseContractorDetailsFormReady\n onEvent: ContractorProfileProps['onEvent']\n className?: string\n setSelfOnboardingActive: (value: boolean) => void\n LoaderComponent?: LoaderComponentType\n}\n\nfunction ContractorProfileReady({\n contractor,\n onEvent,\n className,\n setSelfOnboardingActive,\n LoaderComponent,\n}: ContractorProfileReadyProps) {\n const { t } = useTranslation('Contractor.Profile')\n const Components = useComponentContext()\n\n const watchedSelfOnboarding = useWatch({\n control: contractor.form.hookFormInternals.formMethods.control,\n name: 'selfOnboarding',\n })\n\n useEffect(() => {\n setSelfOnboardingActive(watchedSelfOnboarding)\n }, [watchedSelfOnboarding, setSelfOnboardingActive])\n\n const { Fields } = contractor.form\n const mode = contractor.status.mode\n\n // SSN/EIN are hidden while collection is delegated to the contractor, but must\n // reappear once they've finished so the admin can review/edit them.\n const completedSelfOnboarding = hasCompletedSelfOnboarding(contractor.data.contractor)\n const showTaxId = !watchedSelfOnboarding || completedSelfOnboarding\n\n const handleSubmit = async () => {\n const result = await contractor.actions.onSubmit()\n if (!result) return\n\n onEvent(\n result.mode === 'create'\n ? componentEvents.CONTRACTOR_CREATED\n : componentEvents.CONTRACTOR_UPDATED,\n result.data,\n )\n\n onEvent(componentEvents.CONTRACTOR_PROFILE_DONE, {\n contractorId: result.data.uuid,\n onboardingStatus: result.data.onboardingStatus,\n selfOnboarding: watchedSelfOnboarding && !completedSelfOnboarding,\n })\n }\n\n return (\n <section className={classNames(styles.root, className)}>\n <BaseLayout error={contractor.errorHandling.errors} LoaderComponent={LoaderComponent}>\n <SDKFormProvider formHookResult={contractor}>\n <Form onSubmit={() => void handleSubmit()}>\n <Flex flexDirection=\"column\" gap={20} alignItems=\"stretch\">\n {mode === 'update' && contractor.data.contractor?.uuid && (\n <ContractorProfileW9Warning contractorId={contractor.data.contractor.uuid} />\n )}\n <header>\n <Flex flexDirection=\"column\" gap={4}>\n <Components.Heading as=\"h2\">{t('title')}</Components.Heading>\n <Components.Text variant=\"supporting\">{t('subtitle')}</Components.Text>\n </Flex>\n </header>\n\n {(Fields.SelfOnboarding || Fields.Email) && (\n <Components.Box>\n <Grid gap={16}>\n {Fields.SelfOnboarding && (\n <Fields.SelfOnboarding\n label={t('fields.selfOnboarding.label')}\n description={t('fields.selfOnboarding.description')}\n />\n )}\n\n {Fields.Email && (\n <Fields.Email\n label={t('fields.email.label')}\n validationMessages={{\n REQUIRED: t('validations.email'),\n INVALID_EMAIL: t('validations.emailFormat'),\n }}\n />\n )}\n </Grid>\n </Components.Box>\n )}\n\n <Fields.Type label={t('fields.contractorType.label')} />\n\n {Fields.FirstName && Fields.LastName && (\n <>\n <Grid gridTemplateColumns={{ base: '1fr', medium: '1fr 1fr' }} gap={16}>\n <Fields.FirstName\n label={t('fields.firstName.label')}\n validationMessages={{\n REQUIRED: t('validations.firstName'),\n INVALID_NAME: t('validations.firstNameFormat'),\n }}\n />\n {Fields.MiddleInitial && (\n <Fields.MiddleInitial label={t('fields.middleInitial.label')} />\n )}\n </Grid>\n <Fields.LastName\n label={t('fields.lastName.label')}\n validationMessages={{\n REQUIRED: t('validations.lastName'),\n INVALID_NAME: t('validations.lastNameFormat'),\n }}\n />\n {Fields.Ssn && showTaxId && (\n <Fields.Ssn\n label={t('fields.ssn.label')}\n validationMessages={{\n INVALID_SSN: t('validations.ssnFormat'),\n REQUIRED: t('validations.ssn'),\n }}\n />\n )}\n </>\n )}\n\n {Fields.BusinessName && (\n <>\n <Fields.BusinessName\n label={t('fields.businessName.label')}\n validationMessages={{ REQUIRED: t('validations.businessName') }}\n />\n {Fields.Ein && showTaxId && (\n <Fields.Ein\n label={t('fields.ein.label')}\n validationMessages={{\n INVALID_EIN: t('validations.einFormat'),\n REQUIRED: t('validations.ein'),\n }}\n />\n )}\n </>\n )}\n\n <Fields.WageType label={t('fields.wageType.label')} />\n\n {Fields.HourlyRate && (\n <Fields.HourlyRate\n label={t('fields.hourlyRate.label')}\n min={0}\n format=\"currency\"\n validationMessages={{\n REQUIRED: t('validations.hourlyRate'),\n MAX_HOURLY_RATE: t('validations.hourlyRateMax'),\n }}\n />\n )}\n\n <Fields.StartDate\n label={t('fields.startDate.label')}\n description={t('fields.startDate.description')}\n validationMessages={{ REQUIRED: t('validations.startDate') }}\n />\n </Flex>\n\n <Flex gap={12} justifyContent=\"flex-end\">\n <Components.Button\n type=\"submit\"\n variant=\"primary\"\n isDisabled={contractor.status.isPending}\n >\n {contractor.status.isPending\n ? mode === 'create'\n ? t('buttons.creating')\n : t('buttons.updating')\n : mode === 'create'\n ? t('buttons.create')\n : t('buttons.update')}\n </Components.Button>\n </Flex>\n </Form>\n </SDKFormProvider>\n </BaseLayout>\n </section>\n )\n}\n"],"names":["hasCompletedSelfOnboarding","contractor","ContractorOnboardingStatus","computeRequiredFields","selfOnboardingActive","base","ContractorProfile","props","useComponentDictionary","jsx","BaseBoundaries","SelfOnboardingContractorProfile","ContractorProfileRoot","ContractorProfileW9Warning","contractorId","hasSignedW9","useContractorHasSignedW9","t","useTranslation","Components","useComponentContext","companyId","defaultValues","className","onEvent","LoaderComponent","useI18n","resolvedDefaults","useMemo","ContractorType","setSelfOnboardingActive","useState","optionalFieldsToRequire","useContractorDetailsForm","BaseLayout","ContractorProfileReady","watchedSelfOnboarding","useWatch","useEffect","Fields","mode","completedSelfOnboarding","showTaxId","handleSubmit","result","componentEvents","classNames","styles","SDKFormProvider","jsxs","Form","Flex","Grid","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"ContractorProfile.js","sources":["../../../../../src/components/Contractor/Profile/onboarding/ContractorProfile.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWatch } from 'react-hook-form'\nimport { type Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport classNames from 'classnames'\nimport {\n useContractorDetailsForm,\n ContractorType,\n WageType,\n type ContractorDetailsFormData,\n type ContractorDetailsOptionalFieldsToRequire,\n type UseContractorDetailsFormReady,\n} from '../shared/useContractorDetailsForm'\nimport { SelfOnboardingContractorProfile } from './SelfOnboardingContractorProfile'\nimport styles from './ContractorProfile.module.scss'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseBoundaries, BaseLayout } from '@/components/Base'\nimport { SDKFormProvider } from '@/partner-hook-utils/form/SDKFormProvider'\nimport { Form } from '@/components/Common/Form'\nimport { Flex, Grid } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { useComponentDictionary } from '@/i18n/I18n'\nimport { componentEvents, ContractorOnboardingStatus } from '@/shared/constants'\nimport { useContractorHasSignedW9 } from '@/components/Contractor/shared/useContractorHasSignedW9'\nimport type { LoaderComponentType } from '@/components/Base'\n\n// Once the contractor has finished self-onboarding (or the record is otherwise\n// under admin review / completed), the admin needs to view and edit SSN/EIN even\n// though the self-onboarding toggle stays on. Mirrors the Employee AdminProfile\n// `checkHasCompletedSelfOnboarding` override.\nfunction hasCompletedSelfOnboarding(contractor?: Contractor | null): boolean {\n return (\n contractor?.onboarded === true ||\n contractor?.onboardingStatus === ContractorOnboardingStatus.ONBOARDING_COMPLETED ||\n contractor?.onboardingStatus === ContractorOnboardingStatus.SELF_ONBOARDING_REVIEW ||\n contractor?.onboardingStatus === ContractorOnboardingStatus.ADMIN_ONBOARDING_REVIEW\n )\n}\n\n// The admin form restores the contractor profile's product requiredness on top\n// of the hook's API-aligned baseline (which leaves ssn/ein optional and\n// create-only fields optional on update). When the admin invites the contractor\n// to self-onboard, SSN/EIN are hidden and the contractor supplies them later, so\n// they are dropped from the required set. An SSN/EIN already on file is still\n// waived via redaction, so promoting them when not inviting is safe.\nfunction computeRequiredFields(\n selfOnboardingActive: boolean,\n): ContractorDetailsOptionalFieldsToRequire {\n const base: ContractorDetailsOptionalFieldsToRequire = {\n create: [],\n update: ['firstName', 'lastName', 'businessName', 'hourlyRate', 'workState'],\n }\n if (selfOnboardingActive) return base\n return {\n create: [...(base.create ?? []), 'ssn', 'ein'],\n update: [...(base.update ?? []), 'ssn', 'ein'],\n }\n}\n\n/**\n * Props for {@link ContractorProfile} in admin mode.\n *\n * @remarks\n * Renders the admin create/edit form. When `contractorId` is omitted, the form\n * creates a new contractor under `companyId`. When provided, it fetches and\n * updates the existing contractor.\n *\n * @public\n */\nexport interface ContractorProfileAdminProps extends BaseComponentInterface<'Contractor.Profile'> {\n /** UUID of the company the contractor belongs to. */\n companyId: string\n /** Initial values for the contractor profile form fields. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When `true` (the default), renders the admin create/edit form. */\n isAdmin?: true\n /** UUID of an existing contractor to edit. When omitted, the form creates a new contractor. */\n contractorId?: string\n}\n\n/**\n * Props for {@link ContractorProfile} in self-onboarding mode.\n *\n * @remarks\n * Renders the contractor self-onboarding profile. The contractor must already\n * exist so its type (individual vs. business) can be resolved to determine\n * which fields to display.\n *\n * @public\n */\nexport interface ContractorProfileSelfOnboardingProps extends BaseComponentInterface<'Contractor.Profile'> {\n /** UUID of the company the contractor belongs to. */\n companyId: string\n /** Initial values for the contractor profile form fields. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When `false`, renders the contractor self-onboarding profile. */\n isAdmin: false\n /** UUID of the existing contractor completing self-onboarding. Required in self-onboarding mode. */\n contractorId: string\n}\n\n/**\n * Props for {@link ContractorProfile}.\n *\n * @remarks\n * Discriminated by `isAdmin`. See {@link ContractorProfileAdminProps} and\n * {@link ContractorProfileSelfOnboardingProps} for the specific prop shapes.\n *\n * @public\n */\nexport type ContractorProfileProps =\n ContractorProfileAdminProps | ContractorProfileSelfOnboardingProps\n\n/**\n * Form for creating or editing a contractor profile, supporting both individual and business contractor types.\n *\n * @remarks\n * In admin mode (the default), renders different field sets depending on the contractor type (individual\n * vs. business) and wage type (hourly vs. fixed), and exposes a self-onboarding toggle that invites the\n * contractor to complete their own setup. When `contractorId` is provided, the form fetches the existing\n * contractor and updates it on submit; otherwise it creates a new contractor under `companyId`.\n *\n * When `isAdmin` is `false`, renders the contractor self-onboarding profile instead: it resolves the\n * existing contractor's type and presents the individual (name + SSN) or business (business name + EIN)\n * fields for the contractor to complete.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `contractor/created` | A new contractor was created successfully. | The created contractor entity |\n * | `contractor/updated` | An existing contractor was updated successfully. | The updated contractor entity |\n * | `contractor/profile/done` | The contractor profile step finished. | `{ contractorId: string, onboardingStatus?: string, selfOnboarding: boolean }` |\n *\n * @param props - See {@link ContractorProfileProps}.\n * @returns The rendered contractor profile form.\n * @public\n */\nexport function ContractorProfile(props: ContractorProfileProps) {\n useComponentDictionary('Contractor.Profile', props.dictionary)\n return (\n <BaseBoundaries\n componentName=\"Contractor.Profile\"\n FallbackComponent={props.FallbackComponent}\n LoaderComponent={props.LoaderComponent}\n >\n {props.isAdmin === false ? (\n <SelfOnboardingContractorProfile\n contractorId={props.contractorId}\n onEvent={props.onEvent}\n className={props.className}\n LoaderComponent={props.LoaderComponent}\n />\n ) : (\n <ContractorProfileRoot {...props} />\n )}\n </BaseBoundaries>\n )\n}\n\nfunction ContractorProfileW9Warning({ contractorId }: { contractorId: string }) {\n const hasSignedW9 = useContractorHasSignedW9(contractorId)\n const { t } = useTranslation('Contractor.Profile')\n const Components = useComponentContext()\n if (!hasSignedW9) return null\n return (\n <Components.Alert status=\"warning\" disableScrollIntoView label={t('w9EditWarning.label')}>\n <Components.Text>{t('w9EditWarning.body')}</Components.Text>\n </Components.Alert>\n )\n}\n\nfunction ContractorProfileRoot({\n companyId,\n contractorId,\n defaultValues,\n className,\n onEvent,\n LoaderComponent,\n}: ContractorProfileProps) {\n useI18n('Contractor.Profile')\n\n const resolvedDefaults = useMemo<Partial<ContractorDetailsFormData>>(\n () => ({ type: ContractorType.Business, ...defaultValues }),\n [defaultValues],\n )\n\n // Mirrors the Employee AdminProfile loop: SSN/EIN requiredness depends on the\n // self-onboarding toggle, which lives in the form the hook creates. Seed from\n // the create-mode default, then sync from the watched value (see the ready child).\n const [selfOnboardingActive, setSelfOnboardingActive] = useState(\n !contractorId && (resolvedDefaults.selfOnboarding ?? false),\n )\n\n const optionalFieldsToRequire = useMemo(\n () => computeRequiredFields(selfOnboardingActive),\n [selfOnboardingActive],\n )\n\n const contractor = useContractorDetailsForm(\n contractorId\n ? {\n companyId,\n contractorId,\n defaultValues: resolvedDefaults,\n optionalFieldsToRequire,\n }\n : {\n companyId,\n defaultValues: resolvedDefaults,\n optionalFieldsToRequire,\n },\n )\n\n if (contractor.isLoading) {\n return (\n <BaseLayout\n isLoading\n error={contractor.errorHandling.errors}\n LoaderComponent={LoaderComponent}\n />\n )\n }\n\n return (\n <ContractorProfileReady\n contractor={contractor}\n onEvent={onEvent}\n className={className}\n setSelfOnboardingActive={setSelfOnboardingActive}\n LoaderComponent={LoaderComponent}\n />\n )\n}\n\ninterface ContractorProfileReadyProps {\n contractor: UseContractorDetailsFormReady\n onEvent: ContractorProfileProps['onEvent']\n className?: string\n setSelfOnboardingActive: (value: boolean) => void\n LoaderComponent?: LoaderComponentType\n}\n\nfunction ContractorProfileReady({\n contractor,\n onEvent,\n className,\n setSelfOnboardingActive,\n LoaderComponent,\n}: ContractorProfileReadyProps) {\n const { t } = useTranslation('Contractor.Profile')\n const Components = useComponentContext()\n\n const watchedSelfOnboarding = useWatch({\n control: contractor.form.hookFormInternals.formMethods.control,\n name: 'selfOnboarding',\n })\n\n useEffect(() => {\n setSelfOnboardingActive(watchedSelfOnboarding)\n }, [watchedSelfOnboarding, setSelfOnboardingActive])\n\n const { Fields } = contractor.form\n const mode = contractor.status.mode\n\n // SSN/EIN are hidden while collection is delegated to the contractor, but must\n // reappear once they've finished so the admin can review/edit them.\n const completedSelfOnboarding = hasCompletedSelfOnboarding(contractor.data.contractor)\n const showTaxId = !watchedSelfOnboarding || completedSelfOnboarding\n\n const handleSubmit = async () => {\n const result = await contractor.actions.onSubmit()\n if (!result) return\n\n onEvent(\n result.mode === 'create'\n ? componentEvents.CONTRACTOR_CREATED\n : componentEvents.CONTRACTOR_UPDATED,\n result.data,\n )\n\n onEvent(componentEvents.CONTRACTOR_PROFILE_DONE, {\n contractorId: result.data.uuid,\n onboardingStatus: result.data.onboardingStatus,\n selfOnboarding: watchedSelfOnboarding && !completedSelfOnboarding,\n })\n }\n\n return (\n <section className={classNames(styles.root, className)}>\n <BaseLayout error={contractor.errorHandling.errors} LoaderComponent={LoaderComponent}>\n <SDKFormProvider formHookResult={contractor}>\n <Form onSubmit={() => void handleSubmit()}>\n <Flex flexDirection=\"column\" gap={20} alignItems=\"stretch\">\n {mode === 'update' && contractor.data.contractor?.uuid && (\n <ContractorProfileW9Warning contractorId={contractor.data.contractor.uuid} />\n )}\n <header>\n <Flex flexDirection=\"column\" gap={4}>\n <Components.Heading as=\"h2\">{t('title')}</Components.Heading>\n <Components.Text variant=\"supporting\">{t('subtitle')}</Components.Text>\n </Flex>\n </header>\n\n {(Fields.SelfOnboarding || Fields.Email) && (\n <Components.Box>\n <Grid gap={16}>\n {Fields.SelfOnboarding && (\n <Fields.SelfOnboarding\n label={t('fields.selfOnboarding.label')}\n description={t('fields.selfOnboarding.description')}\n />\n )}\n\n {Fields.Email && (\n <Fields.Email\n label={t('fields.email.label')}\n validationMessages={{\n REQUIRED: t('validations.email'),\n INVALID_EMAIL: t('validations.emailFormat'),\n }}\n />\n )}\n </Grid>\n </Components.Box>\n )}\n\n <Fields.Type label={t('fields.contractorType.label')} />\n\n {Fields.FirstName && Fields.LastName && (\n <>\n <Grid gridTemplateColumns={{ base: '1fr', medium: '1fr 1fr' }} gap={16}>\n <Fields.FirstName\n label={t('fields.firstName.label')}\n validationMessages={{\n REQUIRED: t('validations.firstName'),\n INVALID_NAME: t('validations.firstNameFormat'),\n }}\n />\n {Fields.MiddleInitial && (\n <Fields.MiddleInitial label={t('fields.middleInitial.label')} />\n )}\n </Grid>\n <Fields.LastName\n label={t('fields.lastName.label')}\n validationMessages={{\n REQUIRED: t('validations.lastName'),\n INVALID_NAME: t('validations.lastNameFormat'),\n }}\n />\n {Fields.Ssn && showTaxId && (\n <Fields.Ssn\n label={t('fields.ssn.label')}\n validationMessages={{\n INVALID_SSN: t('validations.ssnFormat'),\n REQUIRED: t('validations.ssn'),\n }}\n />\n )}\n </>\n )}\n\n {Fields.BusinessName && (\n <>\n <Fields.BusinessName\n label={t('fields.businessName.label')}\n validationMessages={{ REQUIRED: t('validations.businessName') }}\n />\n {Fields.Ein && showTaxId && (\n <Fields.Ein\n label={t('fields.ein.label')}\n validationMessages={{\n INVALID_EIN: t('validations.einFormat'),\n REQUIRED: t('validations.ein'),\n }}\n />\n )}\n </>\n )}\n\n <Fields.WageType\n label={t('fields.wageType.label')}\n getOptionLabel={value =>\n value === WageType.Hourly\n ? t('fields.wageType.hourlyLabel')\n : t('fields.wageType.fixedLabel')\n }\n getOptionDescription={value =>\n value === WageType.Hourly\n ? t('fields.wageType.hourlyDescription')\n : t('fields.wageType.fixedDescription')\n }\n />\n\n {Fields.HourlyRate && (\n <Fields.HourlyRate\n label={t('fields.hourlyRate.label')}\n min={0}\n format=\"currency\"\n validationMessages={{\n REQUIRED: t('validations.hourlyRate'),\n MAX_HOURLY_RATE: t('validations.hourlyRateMax'),\n }}\n />\n )}\n\n <Fields.StartDate\n label={t('fields.startDate.label')}\n description={t('fields.startDate.description')}\n validationMessages={{ REQUIRED: t('validations.startDate') }}\n />\n </Flex>\n\n <Flex gap={12} justifyContent=\"flex-end\">\n <Components.Button\n type=\"submit\"\n variant=\"primary\"\n isDisabled={contractor.status.isPending}\n >\n {contractor.status.isPending\n ? mode === 'create'\n ? t('buttons.creating')\n : t('buttons.updating')\n : mode === 'create'\n ? t('buttons.create')\n : t('buttons.update')}\n </Components.Button>\n </Flex>\n </Form>\n </SDKFormProvider>\n </BaseLayout>\n </section>\n )\n}\n"],"names":["hasCompletedSelfOnboarding","contractor","ContractorOnboardingStatus","computeRequiredFields","selfOnboardingActive","base","ContractorProfile","props","useComponentDictionary","jsx","BaseBoundaries","SelfOnboardingContractorProfile","ContractorProfileRoot","ContractorProfileW9Warning","contractorId","hasSignedW9","useContractorHasSignedW9","t","useTranslation","Components","useComponentContext","companyId","defaultValues","className","onEvent","LoaderComponent","useI18n","resolvedDefaults","useMemo","ContractorType","setSelfOnboardingActive","useState","optionalFieldsToRequire","useContractorDetailsForm","BaseLayout","ContractorProfileReady","watchedSelfOnboarding","useWatch","useEffect","Fields","mode","completedSelfOnboarding","showTaxId","handleSubmit","result","componentEvents","classNames","styles","SDKFormProvider","jsxs","Form","Flex","Grid","Fragment","value","WageType"],"mappings":"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"}
@@ -14,7 +14,7 @@ function H({
14
14
  LoaderComponent: o
15
15
  }) {
16
16
  d("Contractor.Profile");
17
- const t = m({ contractorUuid: r }), f = t.data?.contractor;
17
+ const t = m({ contractorUuid: r }), f = t.data?.contractorShow;
18
18
  if (t.isLoading || !f) {
19
19
  const s = l([t]);
20
20
  return /* @__PURE__ */ i(p, { isLoading: !0, error: s.errors, LoaderComponent: o });
@@ -1 +1 @@
1
- {"version":3,"file":"SelfOnboardingContractorProfile.js","sources":["../../../../../src/components/Contractor/Profile/onboarding/SelfOnboardingContractorProfile.tsx"],"sourcesContent":["import { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport { ContractorType } from '../shared/useContractorDetailsForm'\nimport { IndividualSelfOnboardingProfile } from './IndividualSelfOnboardingProfile'\nimport { BusinessSelfOnboardingProfile } from './BusinessSelfOnboardingProfile'\nimport { BaseLayout } from '@/components/Base'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { useI18n } from '@/i18n'\nimport type { EventType } from '@/shared/constants'\nimport type { LoaderComponentType } from '@/components/Base'\n\n/**\n * Props shared by the contractor self-onboarding profile components.\n *\n * @internal\n */\nexport interface ContractorSelfOnboardingProfileProps {\n /** UUID of the existing contractor completing self-onboarding. */\n contractorId: string\n /** Callback invoked when the component emits an event. */\n onEvent: OnEventType<EventType, unknown>\n /** Optional class name applied to the root element. */\n className?: string\n /** Custom loading indicator rendered while this component's async data is fetching. Overrides the indicator configured on `GustoProvider` for this instance only. */\n LoaderComponent?: LoaderComponentType\n}\n\n/**\n * Resolves the contractor's type and renders the matching self-onboarding\n * profile — individual or business.\n *\n * @internal\n */\nexport function SelfOnboardingContractorProfile({\n contractorId,\n onEvent,\n className,\n LoaderComponent,\n}: ContractorSelfOnboardingProfileProps) {\n useI18n('Contractor.Profile')\n\n const contractorQuery = useContractorsGet({ contractorUuid: contractorId })\n const contractor = contractorQuery.data?.contractor\n\n if (contractorQuery.isLoading || !contractor) {\n const errorHandling = composeErrorHandler([contractorQuery])\n return <BaseLayout isLoading error={errorHandling.errors} LoaderComponent={LoaderComponent} />\n }\n\n return contractor.type === ContractorType.Business ? (\n <BusinessSelfOnboardingProfile\n contractorId={contractorId}\n onEvent={onEvent}\n className={className}\n LoaderComponent={LoaderComponent}\n />\n ) : (\n <IndividualSelfOnboardingProfile\n contractorId={contractorId}\n onEvent={onEvent}\n className={className}\n LoaderComponent={LoaderComponent}\n />\n )\n}\n"],"names":["SelfOnboardingContractorProfile","contractorId","onEvent","className","LoaderComponent","useI18n","contractorQuery","useContractorsGet","contractor","errorHandling","composeErrorHandler","BaseLayout","ContractorType","jsx","BusinessSelfOnboardingProfile","IndividualSelfOnboardingProfile"],"mappings":";;;;;;;;;AAiCO,SAASA,EAAgC;AAAA,EAC9C,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AACF,GAAyC;AACvC,EAAAC,EAAQ,oBAAoB;AAE5B,QAAMC,IAAkBC,EAAkB,EAAE,gBAAgBN,GAAc,GACpEO,IAAaF,EAAgB,MAAM;AAEzC,MAAIA,EAAgB,aAAa,CAACE,GAAY;AAC5C,UAAMC,IAAgBC,EAAoB,CAACJ,CAAe,CAAC;AAC3D,6BAAQK,GAAA,EAAW,WAAS,IAAC,OAAOF,EAAc,QAAQ,iBAAAL,GAAkC;AAAA,EAC9F;AAEA,SAAOI,EAAW,SAASI,EAAe,WACxC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,cAAAb;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,MACA,iBAAAC;AAAA,IAAA;AAAA,EAAA,IAGF,gBAAAS;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,cAAAd;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,MACA,iBAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"SelfOnboardingContractorProfile.js","sources":["../../../../../src/components/Contractor/Profile/onboarding/SelfOnboardingContractorProfile.tsx"],"sourcesContent":["import { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport { ContractorType } from '../shared/useContractorDetailsForm'\nimport { IndividualSelfOnboardingProfile } from './IndividualSelfOnboardingProfile'\nimport { BusinessSelfOnboardingProfile } from './BusinessSelfOnboardingProfile'\nimport { BaseLayout } from '@/components/Base'\nimport type { OnEventType } from '@/components/Base/useBase'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport { useI18n } from '@/i18n'\nimport type { EventType } from '@/shared/constants'\nimport type { LoaderComponentType } from '@/components/Base'\n\n/**\n * Props shared by the contractor self-onboarding profile components.\n *\n * @internal\n */\nexport interface ContractorSelfOnboardingProfileProps {\n /** UUID of the existing contractor completing self-onboarding. */\n contractorId: string\n /** Callback invoked when the component emits an event. */\n onEvent: OnEventType<EventType, unknown>\n /** Optional class name applied to the root element. */\n className?: string\n /** Custom loading indicator rendered while this component's async data is fetching. Overrides the indicator configured on `GustoProvider` for this instance only. */\n LoaderComponent?: LoaderComponentType\n}\n\n/**\n * Resolves the contractor's type and renders the matching self-onboarding\n * profile — individual or business.\n *\n * @internal\n */\nexport function SelfOnboardingContractorProfile({\n contractorId,\n onEvent,\n className,\n LoaderComponent,\n}: ContractorSelfOnboardingProfileProps) {\n useI18n('Contractor.Profile')\n\n const contractorQuery = useContractorsGet({ contractorUuid: contractorId })\n const contractor = contractorQuery.data?.contractorShow\n\n if (contractorQuery.isLoading || !contractor) {\n const errorHandling = composeErrorHandler([contractorQuery])\n return <BaseLayout isLoading error={errorHandling.errors} LoaderComponent={LoaderComponent} />\n }\n\n return contractor.type === ContractorType.Business ? (\n <BusinessSelfOnboardingProfile\n contractorId={contractorId}\n onEvent={onEvent}\n className={className}\n LoaderComponent={LoaderComponent}\n />\n ) : (\n <IndividualSelfOnboardingProfile\n contractorId={contractorId}\n onEvent={onEvent}\n className={className}\n LoaderComponent={LoaderComponent}\n />\n )\n}\n"],"names":["SelfOnboardingContractorProfile","contractorId","onEvent","className","LoaderComponent","useI18n","contractorQuery","useContractorsGet","contractor","errorHandling","composeErrorHandler","BaseLayout","ContractorType","jsx","BusinessSelfOnboardingProfile","IndividualSelfOnboardingProfile"],"mappings":";;;;;;;;;AAiCO,SAASA,EAAgC;AAAA,EAC9C,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AACF,GAAyC;AACvC,EAAAC,EAAQ,oBAAoB;AAE5B,QAAMC,IAAkBC,EAAkB,EAAE,gBAAgBN,GAAc,GACpEO,IAAaF,EAAgB,MAAM;AAEzC,MAAIA,EAAgB,aAAa,CAACE,GAAY;AAC5C,UAAMC,IAAgBC,EAAoB,CAACJ,CAAe,CAAC;AAC3D,6BAAQK,GAAA,EAAW,WAAS,IAAC,OAAOF,EAAc,QAAQ,iBAAAL,GAAkC;AAAA,EAC9F;AAEA,SAAOI,EAAW,SAASI,EAAe,WACxC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,cAAAb;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,MACA,iBAAAC;AAAA,IAAA;AAAA,EAAA,IAGF,gBAAAS;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,cAAAd;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,MACA,iBAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,42 +1,40 @@
1
1
  import { z as e } from "zod";
2
- import { ContractorType as E, ContractorWageType as c } from "@gusto/embedded-api/models/components/contractor";
3
- import { buildFormSchema as N } from "../../../../../partner-hook-utils/form/buildFormSchema.js";
4
- import { coerceNaN as d, coerceToISODate as R } from "../../../../../partner-hook-utils/form/preprocessors.js";
5
- import { EIN_REGEX as p, SSN_REGEX as u, NAME_REGEX as m } from "../../../../../helpers/validations.js";
6
- import { normalizeEin as A } from "../../../../../helpers/federalEin.js";
7
- const o = E, n = c, r = {
2
+ import { ContractorType as E, ContractorWageType as N } from "@gusto/embedded-api/models/components/contractor";
3
+ import { buildFormSchema as c } from "../../../../../partner-hook-utils/form/buildFormSchema.js";
4
+ import { coerceToISODate as d } from "../../../../../partner-hook-utils/form/preprocessors.js";
5
+ import { createHourlyRateValidator as R } from "../../../shared/hourlyRate.js";
6
+ import { EIN_REGEX as u, SSN_REGEX as p, NAME_REGEX as I } from "../../../../../helpers/validations.js";
7
+ import { normalizeEin as f } from "../../../../../helpers/federalEin.js";
8
+ const o = E, n = N, r = {
8
9
  REQUIRED: "REQUIRED",
9
10
  INVALID_NAME: "INVALID_NAME",
10
11
  INVALID_EMAIL: "INVALID_EMAIL",
11
12
  INVALID_SSN: "INVALID_SSN",
12
13
  INVALID_EIN: "INVALID_EIN",
13
14
  MAX_HOURLY_RATE: "MAX_HOURLY_RATE"
14
- }, f = 1e12, D = {
15
+ }, A = {
15
16
  type: e.enum([o.Individual, o.Business]),
16
17
  wageType: e.enum([n.Hourly, n.Fixed]),
17
18
  startDate: e.preprocess(
18
- R,
19
+ d,
19
20
  e.iso.date({ error: () => r.REQUIRED })
20
21
  ),
21
- hourlyRate: e.preprocess(
22
- d(0),
23
- e.number().min(0).max(f, { message: r.MAX_HOURLY_RATE })
24
- ),
22
+ hourlyRate: R(r.MAX_HOURLY_RATE),
25
23
  selfOnboarding: e.boolean(),
26
24
  fileNewHireReport: e.boolean(),
27
25
  email: e.email({ error: () => r.INVALID_EMAIL }),
28
- firstName: e.string().trim().min(1, { message: r.REQUIRED }).regex(m, { message: r.INVALID_NAME }),
29
- lastName: e.string().trim().min(1, { message: r.REQUIRED }).regex(m, { message: r.INVALID_NAME }),
26
+ firstName: e.string().trim().min(1, { message: r.REQUIRED }).regex(I, { message: r.INVALID_NAME }),
27
+ lastName: e.string().trim().min(1, { message: r.REQUIRED }).regex(I, { message: r.INVALID_NAME }),
30
28
  middleInitial: e.string(),
31
29
  businessName: e.string(),
32
30
  workState: e.string(),
33
- ssn: e.string({ error: () => r.REQUIRED }).refine((t) => u.test(t.replace(/\D/g, "")), {
31
+ ssn: e.string({ error: () => r.REQUIRED }).refine((t) => p.test(t.replace(/\D/g, "")), {
34
32
  message: r.INVALID_SSN
35
33
  }),
36
- ein: e.string({ error: () => r.REQUIRED }).refine((t) => p.test(A(t)), {
34
+ ein: e.string({ error: () => r.REQUIRED }).refine((t) => u.test(f(t)), {
37
35
  message: r.INVALID_EIN
38
36
  })
39
- }, g = {
37
+ }, D = {
40
38
  startDate: "create",
41
39
  firstName: "create",
42
40
  lastName: "create",
@@ -48,30 +46,30 @@ const o = E, n = c, r = {
48
46
  ein: "never",
49
47
  email: (t) => t.selfOnboarding
50
48
  };
51
- function U(t = {}) {
52
- const { mode: i = "create", optionalFieldsToRequire: s, hasSsn: I = !1, hasEin: l = !1 } = t, a = [];
53
- return I && a.push("ssn"), l && a.push("ein"), N(D, {
54
- requiredFieldsConfig: g,
49
+ function M(t = {}) {
50
+ const { mode: s = "create", optionalFieldsToRequire: i, hasSsn: l = !1, hasEin: m = !1 } = t, a = [];
51
+ return l && a.push("ssn"), m && a.push("ein"), c(A, {
52
+ requiredFieldsConfig: D,
55
53
  requiredErrorCode: r.REQUIRED,
56
- mode: i,
57
- optionalFieldsToRequire: s,
54
+ mode: s,
55
+ optionalFieldsToRequire: i,
58
56
  fieldsWithRedactedValues: a,
59
57
  // Applicability gating: evaluated per-validation so a field's required
60
58
  // check is skipped while it doesn't apply to the current selection. The
61
59
  // field stays in the schema (validated as optional), keeping requiredness
62
60
  // static and fully promotable via `optionalFieldsToRequire`.
63
- excludeFields: _
61
+ excludeFields: g
64
62
  });
65
63
  }
66
- function _(t) {
67
- const i = t.type === o.Individual, s = [];
68
- return t.wageType !== n.Hourly && s.push("hourlyRate"), i ? (s.push("businessName", "ein"), t.fileNewHireReport || s.push("workState")) : s.push("firstName", "lastName", "middleInitial", "fileNewHireReport", "ssn", "workState"), s;
64
+ function g(t) {
65
+ const s = t.type === o.Individual, i = [];
66
+ return t.wageType !== n.Hourly && i.push("hourlyRate"), s ? (i.push("businessName", "ein"), t.fileNewHireReport || i.push("workState")) : i.push("firstName", "lastName", "middleInitial", "fileNewHireReport", "ssn", "workState"), i;
69
67
  }
70
68
  export {
71
69
  r as ContractorDetailsErrorCodes,
72
70
  o as ContractorType,
73
71
  n as WageType,
74
- U as createContractorDetailsSchema,
75
- _ as getExcludedContractorFields
72
+ M as createContractorDetailsSchema,
73
+ g as getExcludedContractorFields
76
74
  };
77
75
  //# sourceMappingURL=contractorDetailsSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contractorDetailsSchema.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n ContractorWageType as ApiWageType,\n ContractorType as ApiContractorType,\n} from '@gusto/embedded-api/models/components/contractor'\nimport {\n buildFormSchema,\n type RequiredFieldConfig,\n type OptionalFieldsToRequire,\n} from '@/partner-hook-utils/form/buildFormSchema'\nimport { coerceNaN, coerceToISODate } from '@/partner-hook-utils/form/preprocessors'\nimport { SSN_REGEX, EIN_REGEX, NAME_REGEX } from '@/helpers/validations'\nimport { normalizeEin } from '@/helpers/federalEin'\n\n/**\n * Contractor type enum (`Individual` / `Business`) re-exported from the API model.\n *\n * @public\n */\nexport const ContractorType = ApiContractorType\n/**\n * Contractor wage type enum (`Fixed` / `Hourly`) re-exported from the API model.\n *\n * @public\n */\nexport const WageType = ApiWageType\n\n// ── Error codes ────────────────────────────────────────────────────────\n\n/**\n * Validation error codes emitted by the contractor details form schema. Map\n * these codes to localized copy in `validationMessages` when composing the\n * hook.\n *\n * @public\n */\nexport const ContractorDetailsErrorCodes = {\n REQUIRED: 'REQUIRED',\n INVALID_NAME: 'INVALID_NAME',\n INVALID_EMAIL: 'INVALID_EMAIL',\n INVALID_SSN: 'INVALID_SSN',\n INVALID_EIN: 'INVALID_EIN',\n MAX_HOURLY_RATE: 'MAX_HOURLY_RATE',\n} as const\n\n// Mirrors the server's fixed hourly-rate cap so an over-limit value is caught\n// inline instead of round-tripping to an API error.\nconst HOURLY_RATE_CAP = 1_000_000_000_000\n\n/**\n * Union of validation error code strings emitted by the contractor details\n * form schema.\n *\n * @public\n */\nexport type ContractorDetailsErrorCode =\n (typeof ContractorDetailsErrorCodes)[keyof typeof ContractorDetailsErrorCodes]\n\n// ── Field validators ───────────────────────────────────────────────────\n\nconst fieldValidators = {\n type: z.enum([ContractorType.Individual, ContractorType.Business]),\n wageType: z.enum([WageType.Hourly, WageType.Fixed]),\n startDate: z.preprocess(\n coerceToISODate,\n z.iso.date({ error: () => ContractorDetailsErrorCodes.REQUIRED }),\n ),\n hourlyRate: z.preprocess(\n coerceNaN(0),\n z\n .number()\n .min(0)\n .max(HOURLY_RATE_CAP, { message: ContractorDetailsErrorCodes.MAX_HOURLY_RATE }),\n ),\n selfOnboarding: z.boolean(),\n fileNewHireReport: z.boolean(),\n email: z.email({ error: () => ContractorDetailsErrorCodes.INVALID_EMAIL }),\n firstName: z\n .string()\n .trim()\n .min(1, { message: ContractorDetailsErrorCodes.REQUIRED })\n .regex(NAME_REGEX, { message: ContractorDetailsErrorCodes.INVALID_NAME }),\n lastName: z\n .string()\n .trim()\n .min(1, { message: ContractorDetailsErrorCodes.REQUIRED })\n .regex(NAME_REGEX, { message: ContractorDetailsErrorCodes.INVALID_NAME }),\n middleInitial: z.string(),\n businessName: z.string(),\n workState: z.string(),\n ssn: z\n .string({ error: () => ContractorDetailsErrorCodes.REQUIRED })\n .refine((v: string) => SSN_REGEX.test(v.replace(/\\D/g, '')), {\n message: ContractorDetailsErrorCodes.INVALID_SSN,\n }),\n ein: z\n .string({ error: () => ContractorDetailsErrorCodes.REQUIRED })\n .refine((v: string) => EIN_REGEX.test(normalizeEin(v)), {\n message: ContractorDetailsErrorCodes.INVALID_EIN,\n }),\n}\n\n/**\n * Shape of the values managed by the contractor details form.\n *\n * @public\n * @interface\n */\nexport type ContractorDetailsFormData = {\n [K in keyof typeof fieldValidators]: z.infer<(typeof fieldValidators)[K]>\n}\n\n/** @internal */\nexport type ContractorDetailsFormOutputs = ContractorDetailsFormData\n\n// ── Required fields config ─────────────────────────────────────────────\n//\n// Requiredness mirrors the contractor create/update API contract: fields the\n// API requires on create are `'create'` (optional on update), and fields the\n// API treats as optional are `'never'`. Type/wage *applicability* (does a field\n// apply to this contractor at all?) is handled separately by `excludeFields` —\n// see `getExcludedContractorFields` — not by requiredness. SSN/EIN are never\n// gated by `selfOnboarding`: each consumer decides whether to render and require\n// them (admins hide them when inviting; self-onboarding profiles collect them).\n//\n// `email` is the one genuinely value-conditional rule: it always applies but is\n// only required when self-onboarding is on (create and update, matching the\n// API's \"if self_onboarding is true, then email is required\"). A single-operand\n// predicate keeps `buildFormSchema`'s dependency-detecting Proxy accurate.\n\nconst requiredFieldsConfig = {\n startDate: 'create',\n firstName: 'create',\n lastName: 'create',\n businessName: 'create',\n hourlyRate: 'create',\n workState: 'create',\n middleInitial: 'never',\n ssn: 'never',\n ein: 'never',\n email: data => data.selfOnboarding,\n} satisfies RequiredFieldConfig<typeof fieldValidators>\n\n// ── Schema factory ─────────────────────────────────────────────────────\n\n/**\n * Keys of optional contractor details fields that can be promoted to required\n * via the hook's `optionalFieldsToRequire` option.\n *\n * @public\n */\nexport type ContractorDetailsOptionalFieldsToRequire = OptionalFieldsToRequire<\n typeof requiredFieldsConfig\n>\n\n/** @internal */\ninterface ContractorDetailsSchemaOptions {\n mode?: 'create' | 'update'\n optionalFieldsToRequire?: ContractorDetailsOptionalFieldsToRequire\n hasSsn?: boolean\n hasEin?: boolean\n}\n\n/** @internal */\nexport function createContractorDetailsSchema(options: ContractorDetailsSchemaOptions = {}) {\n const { mode = 'create', optionalFieldsToRequire, hasSsn = false, hasEin = false } = options\n\n const fieldsWithRedactedValues: Array<keyof typeof fieldValidators> = []\n if (hasSsn) fieldsWithRedactedValues.push('ssn')\n if (hasEin) fieldsWithRedactedValues.push('ein')\n\n return buildFormSchema(fieldValidators, {\n requiredFieldsConfig,\n requiredErrorCode: ContractorDetailsErrorCodes.REQUIRED,\n mode,\n optionalFieldsToRequire,\n fieldsWithRedactedValues,\n // Applicability gating: evaluated per-validation so a field's required\n // check is skipped while it doesn't apply to the current selection. The\n // field stays in the schema (validated as optional), keeping requiredness\n // static and fully promotable via `optionalFieldsToRequire`.\n excludeFields: getExcludedContractorFields,\n })\n}\n\n/** @internal */\nexport type ContractorDiscriminators = Partial<\n Pick<ContractorDetailsFormData, 'type' | 'wageType' | 'fileNewHireReport'>\n>\n\n/**\n * Fields that don't apply to the given contractor selection. Their required\n * check is skipped at validation time and they're never rendered. `email` is\n * never excluded — it always applies and its requiredness is governed by the\n * `selfOnboarding` predicate.\n *\n * @internal\n */\nexport function getExcludedContractorFields(\n values: ContractorDiscriminators,\n): Array<keyof typeof fieldValidators> {\n const isIndividual = values.type === ContractorType.Individual\n const excluded: Array<keyof typeof fieldValidators> = []\n\n if (values.wageType !== WageType.Hourly) excluded.push('hourlyRate')\n\n if (isIndividual) {\n excluded.push('businessName', 'ein')\n if (!values.fileNewHireReport) excluded.push('workState')\n } else {\n excluded.push('firstName', 'lastName', 'middleInitial', 'fileNewHireReport', 'ssn', 'workState')\n }\n\n return excluded\n}\n"],"names":["ContractorType","ApiContractorType","WageType","ApiWageType","ContractorDetailsErrorCodes","HOURLY_RATE_CAP","fieldValidators","z","coerceToISODate","coerceNaN","NAME_REGEX","v","SSN_REGEX","EIN_REGEX","normalizeEin","requiredFieldsConfig","data","createContractorDetailsSchema","options","mode","optionalFieldsToRequire","hasSsn","hasEin","fieldsWithRedactedValues","buildFormSchema","getExcludedContractorFields","values","isIndividual","excluded"],"mappings":"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"}
1
+ {"version":3,"file":"contractorDetailsSchema.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n ContractorWageType as ApiWageType,\n ContractorType as ApiContractorType,\n} from '@gusto/embedded-api/models/components/contractor'\nimport {\n buildFormSchema,\n type RequiredFieldConfig,\n type OptionalFieldsToRequire,\n} from '@/partner-hook-utils/form/buildFormSchema'\nimport { coerceToISODate } from '@/partner-hook-utils/form/preprocessors'\nimport { createHourlyRateValidator } from '@/components/Contractor/shared/hourlyRate'\nimport { SSN_REGEX, EIN_REGEX, NAME_REGEX } from '@/helpers/validations'\nimport { normalizeEin } from '@/helpers/federalEin'\n\n/**\n * Contractor type enum (`Individual` / `Business`) re-exported from the API model.\n *\n * @public\n */\nexport const ContractorType = ApiContractorType\n/**\n * Contractor wage type enum (`Fixed` / `Hourly`) re-exported from the API model.\n *\n * @public\n */\nexport const WageType = ApiWageType\n\n// ── Error codes ────────────────────────────────────────────────────────\n\n/**\n * Validation error codes emitted by the contractor details form schema. Map\n * these codes to localized copy in `validationMessages` when composing the\n * hook.\n *\n * @public\n */\nexport const ContractorDetailsErrorCodes = {\n REQUIRED: 'REQUIRED',\n INVALID_NAME: 'INVALID_NAME',\n INVALID_EMAIL: 'INVALID_EMAIL',\n INVALID_SSN: 'INVALID_SSN',\n INVALID_EIN: 'INVALID_EIN',\n MAX_HOURLY_RATE: 'MAX_HOURLY_RATE',\n} as const\n\n/**\n * Union of validation error code strings emitted by the contractor details\n * form schema.\n *\n * @public\n */\nexport type ContractorDetailsErrorCode =\n (typeof ContractorDetailsErrorCodes)[keyof typeof ContractorDetailsErrorCodes]\n\n// ── Field validators ───────────────────────────────────────────────────\n\nconst fieldValidators = {\n type: z.enum([ContractorType.Individual, ContractorType.Business]),\n wageType: z.enum([WageType.Hourly, WageType.Fixed]),\n startDate: z.preprocess(\n coerceToISODate,\n z.iso.date({ error: () => ContractorDetailsErrorCodes.REQUIRED }),\n ),\n hourlyRate: createHourlyRateValidator(ContractorDetailsErrorCodes.MAX_HOURLY_RATE),\n selfOnboarding: z.boolean(),\n fileNewHireReport: z.boolean(),\n email: z.email({ error: () => ContractorDetailsErrorCodes.INVALID_EMAIL }),\n firstName: z\n .string()\n .trim()\n .min(1, { message: ContractorDetailsErrorCodes.REQUIRED })\n .regex(NAME_REGEX, { message: ContractorDetailsErrorCodes.INVALID_NAME }),\n lastName: z\n .string()\n .trim()\n .min(1, { message: ContractorDetailsErrorCodes.REQUIRED })\n .regex(NAME_REGEX, { message: ContractorDetailsErrorCodes.INVALID_NAME }),\n middleInitial: z.string(),\n businessName: z.string(),\n workState: z.string(),\n ssn: z\n .string({ error: () => ContractorDetailsErrorCodes.REQUIRED })\n .refine((v: string) => SSN_REGEX.test(v.replace(/\\D/g, '')), {\n message: ContractorDetailsErrorCodes.INVALID_SSN,\n }),\n ein: z\n .string({ error: () => ContractorDetailsErrorCodes.REQUIRED })\n .refine((v: string) => EIN_REGEX.test(normalizeEin(v)), {\n message: ContractorDetailsErrorCodes.INVALID_EIN,\n }),\n}\n\n/**\n * Shape of the values managed by the contractor details form.\n *\n * @public\n * @interface\n */\nexport type ContractorDetailsFormData = {\n [K in keyof typeof fieldValidators]: z.infer<(typeof fieldValidators)[K]>\n}\n\n/** @internal */\nexport type ContractorDetailsFormOutputs = ContractorDetailsFormData\n\n// ── Required fields config ─────────────────────────────────────────────\n//\n// Requiredness mirrors the contractor create/update API contract: fields the\n// API requires on create are `'create'` (optional on update), and fields the\n// API treats as optional are `'never'`. Type/wage *applicability* (does a field\n// apply to this contractor at all?) is handled separately by `excludeFields` —\n// see `getExcludedContractorFields` — not by requiredness. SSN/EIN are never\n// gated by `selfOnboarding`: each consumer decides whether to render and require\n// them (admins hide them when inviting; self-onboarding profiles collect them).\n//\n// `email` is the one genuinely value-conditional rule: it always applies but is\n// only required when self-onboarding is on (create and update, matching the\n// API's \"if self_onboarding is true, then email is required\"). A single-operand\n// predicate keeps `buildFormSchema`'s dependency-detecting Proxy accurate.\n\nconst requiredFieldsConfig = {\n startDate: 'create',\n firstName: 'create',\n lastName: 'create',\n businessName: 'create',\n hourlyRate: 'create',\n workState: 'create',\n middleInitial: 'never',\n ssn: 'never',\n ein: 'never',\n email: data => data.selfOnboarding,\n} satisfies RequiredFieldConfig<typeof fieldValidators>\n\n// ── Schema factory ─────────────────────────────────────────────────────\n\n/**\n * Keys of optional contractor details fields that can be promoted to required\n * via the hook's `optionalFieldsToRequire` option.\n *\n * @public\n */\nexport type ContractorDetailsOptionalFieldsToRequire = OptionalFieldsToRequire<\n typeof requiredFieldsConfig\n>\n\n/** @internal */\ninterface ContractorDetailsSchemaOptions {\n mode?: 'create' | 'update'\n optionalFieldsToRequire?: ContractorDetailsOptionalFieldsToRequire\n hasSsn?: boolean\n hasEin?: boolean\n}\n\n/** @internal */\nexport function createContractorDetailsSchema(options: ContractorDetailsSchemaOptions = {}) {\n const { mode = 'create', optionalFieldsToRequire, hasSsn = false, hasEin = false } = options\n\n const fieldsWithRedactedValues: Array<keyof typeof fieldValidators> = []\n if (hasSsn) fieldsWithRedactedValues.push('ssn')\n if (hasEin) fieldsWithRedactedValues.push('ein')\n\n return buildFormSchema(fieldValidators, {\n requiredFieldsConfig,\n requiredErrorCode: ContractorDetailsErrorCodes.REQUIRED,\n mode,\n optionalFieldsToRequire,\n fieldsWithRedactedValues,\n // Applicability gating: evaluated per-validation so a field's required\n // check is skipped while it doesn't apply to the current selection. The\n // field stays in the schema (validated as optional), keeping requiredness\n // static and fully promotable via `optionalFieldsToRequire`.\n excludeFields: getExcludedContractorFields,\n })\n}\n\n/** @internal */\nexport type ContractorDiscriminators = Partial<\n Pick<ContractorDetailsFormData, 'type' | 'wageType' | 'fileNewHireReport'>\n>\n\n/**\n * Fields that don't apply to the given contractor selection. Their required\n * check is skipped at validation time and they're never rendered. `email` is\n * never excluded — it always applies and its requiredness is governed by the\n * `selfOnboarding` predicate.\n *\n * @internal\n */\nexport function getExcludedContractorFields(\n values: ContractorDiscriminators,\n): Array<keyof typeof fieldValidators> {\n const isIndividual = values.type === ContractorType.Individual\n const excluded: Array<keyof typeof fieldValidators> = []\n\n if (values.wageType !== WageType.Hourly) excluded.push('hourlyRate')\n\n if (isIndividual) {\n excluded.push('businessName', 'ein')\n if (!values.fileNewHireReport) excluded.push('workState')\n } else {\n excluded.push('firstName', 'lastName', 'middleInitial', 'fileNewHireReport', 'ssn', 'workState')\n }\n\n return excluded\n}\n"],"names":["ContractorType","ApiContractorType","WageType","ApiWageType","ContractorDetailsErrorCodes","fieldValidators","z","coerceToISODate","createHourlyRateValidator","NAME_REGEX","v","SSN_REGEX","EIN_REGEX","normalizeEin","requiredFieldsConfig","data","createContractorDetailsSchema","options","mode","optionalFieldsToRequire","hasSsn","hasEin","fieldsWithRedactedValues","buildFormSchema","getExcludedContractorFields","values","isIndividual","excluded"],"mappings":";;;;;;;AAoBO,MAAMA,IAAiBC,GAMjBC,IAAWC,GAWXC,IAA8B;AAAA,EACzC,UAAU;AAAA,EACV,cAAc;AAAA,EACd,eAAe;AAAA,EACf,aAAa;AAAA,EACb,aAAa;AAAA,EACb,iBAAiB;AACnB,GAaMC,IAAkB;AAAA,EACtB,MAAMC,EAAE,KAAK,CAACN,EAAe,YAAYA,EAAe,QAAQ,CAAC;AAAA,EACjE,UAAUM,EAAE,KAAK,CAACJ,EAAS,QAAQA,EAAS,KAAK,CAAC;AAAA,EAClD,WAAWI,EAAE;AAAA,IACXC;AAAA,IACAD,EAAE,IAAI,KAAK,EAAE,OAAO,MAAMF,EAA4B,UAAU;AAAA,EAAA;AAAA,EAElE,YAAYI,EAA0BJ,EAA4B,eAAe;AAAA,EACjF,gBAAgBE,EAAE,QAAA;AAAA,EAClB,mBAAmBA,EAAE,QAAA;AAAA,EACrB,OAAOA,EAAE,MAAM,EAAE,OAAO,MAAMF,EAA4B,eAAe;AAAA,EACzE,WAAWE,EACR,OAAA,EACA,OACA,IAAI,GAAG,EAAE,SAASF,EAA4B,SAAA,CAAU,EACxD,MAAMK,GAAY,EAAE,SAASL,EAA4B,cAAc;AAAA,EAC1E,UAAUE,EACP,OAAA,EACA,OACA,IAAI,GAAG,EAAE,SAASF,EAA4B,SAAA,CAAU,EACxD,MAAMK,GAAY,EAAE,SAASL,EAA4B,cAAc;AAAA,EAC1E,eAAeE,EAAE,OAAA;AAAA,EACjB,cAAcA,EAAE,OAAA;AAAA,EAChB,WAAWA,EAAE,OAAA;AAAA,EACb,KAAKA,EACF,OAAO,EAAE,OAAO,MAAMF,EAA4B,UAAU,EAC5D,OAAO,CAACM,MAAcC,EAAU,KAAKD,EAAE,QAAQ,OAAO,EAAE,CAAC,GAAG;AAAA,IAC3D,SAASN,EAA4B;AAAA,EAAA,CACtC;AAAA,EACH,KAAKE,EACF,OAAO,EAAE,OAAO,MAAMF,EAA4B,SAAA,CAAU,EAC5D,OAAO,CAACM,MAAcE,EAAU,KAAKC,EAAaH,CAAC,CAAC,GAAG;AAAA,IACtD,SAASN,EAA4B;AAAA,EAAA,CACtC;AACL,GA8BMU,IAAuB;AAAA,EAC3B,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf,KAAK;AAAA,EACL,KAAK;AAAA,EACL,OAAO,OAAQC,EAAK;AACtB;AAuBO,SAASC,EAA8BC,IAA0C,IAAI;AAC1F,QAAM,EAAE,MAAAC,IAAO,UAAU,yBAAAC,GAAyB,QAAAC,IAAS,IAAO,QAAAC,IAAS,OAAUJ,GAE/EK,IAAgE,CAAA;AACtE,SAAIF,KAAQE,EAAyB,KAAK,KAAK,GAC3CD,KAAQC,EAAyB,KAAK,KAAK,GAExCC,EAAgBlB,GAAiB;AAAA,IACtC,sBAAAS;AAAA,IACA,mBAAmBV,EAA4B;AAAA,IAC/C,MAAAc;AAAA,IACA,yBAAAC;AAAA,IACA,0BAAAG;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,eAAeE;AAAA,EAAA,CAChB;AACH;AAeO,SAASA,EACdC,GACqC;AACrC,QAAMC,IAAeD,EAAO,SAASzB,EAAe,YAC9C2B,IAAgD,CAAA;AAEtD,SAAIF,EAAO,aAAavB,EAAS,UAAQyB,EAAS,KAAK,YAAY,GAE/DD,KACFC,EAAS,KAAK,gBAAgB,KAAK,GAC9BF,EAAO,qBAAmBE,EAAS,KAAK,WAAW,KAExDA,EAAS,KAAK,aAAa,YAAY,iBAAiB,qBAAqB,OAAO,WAAW,GAG1FA;AACT;"}
@@ -5,11 +5,11 @@ import { useContractorsGet as ae } from "@gusto/embedded-api/react-query/contrac
5
5
  import { useContractorsCreateMutation as de } from "@gusto/embedded-api/react-query/contractorsCreate";
6
6
  import { useContractorsUpdateMutation as le } from "@gusto/embedded-api/react-query/contractorsUpdate";
7
7
  import { createContractorDetailsSchema as me, WageType as m, ContractorType as a } from "./contractorDetailsSchema.js";
8
- import { WorkStateField as ue, EinField as ce, SsnField as fe, BusinessNameField as ge, MiddleInitialField as Ne, LastNameField as pe, FirstNameField as we, EmailField as Se, FileNewHireReportField as ye, SelfOnboardingField as ve, HourlyRateField as be, StartDateField as Fe, WageTypeField as Re, TypeField as he } from "./fields.js";
8
+ import { WorkStateField as ue, EinField as ce, SsnField as fe, BusinessNameField as ge, MiddleInitialField as Ne, LastNameField as we, FirstNameField as pe, EmailField as Se, FileNewHireReportField as ye, SelfOnboardingField as ve, HourlyRateField as be, StartDateField as Fe, WageTypeField as Re, TypeField as he } from "./fields.js";
9
9
  import { useDeriveFieldsMetadata as Oe } from "../../../../../partner-hook-utils/form/useDeriveFieldsMetadata.js";
10
10
  import { useHookFormInternals as Te } from "../../../../../partner-hook-utils/form/useHookFormInternals.js";
11
11
  import { createGetFormSubmissionValues as He } from "../../../../../partner-hook-utils/form/getFormSubmissionValues.js";
12
- import { withOptions as w } from "../../../../../partner-hook-utils/form/withOptions.js";
12
+ import { withOptions as p } from "../../../../../partner-hook-utils/form/withOptions.js";
13
13
  import { composeErrorHandler as Ce } from "../../../../../partner-hook-utils/composeErrorHandler.js";
14
14
  import { ContractorOnboardingStatus as L, ContractorSelfOnboardingStatuses as Ie, STATES_ABBR as q } from "../../../../../shared/constants.js";
15
15
  import { useBaseSubmit as Ee } from "../../../../Base/useBaseSubmit.js";
@@ -19,12 +19,12 @@ const Me = (e) => !!e?.onboardingStatus && Ie.has(e.onboardingStatus), Be = (e)
19
19
  function ke(e) {
20
20
  const n = [a.Individual, a.Business], u = [m.Hourly, m.Fixed];
21
21
  return {
22
- type: w(
22
+ type: p(
23
23
  e.type,
24
24
  n.map((r) => ({ value: r, label: r })),
25
25
  n
26
26
  ),
27
- wageType: w(
27
+ wageType: p(
28
28
  e.wageType,
29
29
  u.map((r) => ({ value: r, label: r })),
30
30
  u
@@ -40,7 +40,7 @@ function ke(e) {
40
40
  businessName: e.businessName,
41
41
  ssn: e.ssn,
42
42
  ein: e.ein,
43
- workState: w(
43
+ workState: p(
44
44
  e.workState,
45
45
  q.map((r) => ({ value: r, label: r })),
46
46
  q
@@ -60,7 +60,7 @@ function $e({
60
60
  const N = ae(
61
61
  { contractorUuid: n ?? "" },
62
62
  { enabled: !!n }
63
- ), t = N.data?.contractor, c = !n, _ = Be(t), y = c ? "create" : "update", v = t?.hasSsn ?? !1, b = t?.hasEin ?? !1, [F, P] = D(
63
+ ), t = N.data?.contractorShow, c = !n, _ = Be(t), y = c ? "create" : "update", v = t?.hasSsn ?? !1, b = t?.hasEin ?? !1, [F, P] = D(
64
64
  () => me({ mode: y, optionalFieldsToRequire: S, hasSsn: v, hasEin: b }),
65
65
  [y, S, v, b]
66
66
  ), R = t?.hourlyRate != null ? parseFloat(t.hourlyRate) : void 0, h = D(
@@ -107,7 +107,9 @@ function $e({
107
107
  startDate: i.startDate,
108
108
  selfOnboarding: B,
109
109
  email: (r || B) && i.email || void 0,
110
- hourlyRate: i.wageType === m.Hourly ? String(i.hourlyRate) : void 0,
110
+ // On update, an Hourly contractor with no stored rate has no `hourlyRate` value at
111
+ // all; the finite check keeps that from serializing as the string "undefined".
112
+ hourlyRate: i.wageType === m.Hourly && Number.isFinite(i.hourlyRate) ? String(i.hourlyRate) : void 0,
111
113
  ...i.type === a.Individual ? {
112
114
  firstName: i.firstName,
113
115
  lastName: i.lastName,
@@ -121,7 +123,7 @@ function $e({
121
123
  ein: oe || void 0
122
124
  }
123
125
  };
124
- let p;
126
+ let w;
125
127
  if (c) {
126
128
  const f = ee?.companyId ?? e;
127
129
  if (!f)
@@ -134,7 +136,7 @@ function $e({
134
136
  });
135
137
  if (!l.contractor)
136
138
  throw new g("Contractor creation failed");
137
- p = l.contractor;
139
+ w = l.contractor;
138
140
  } else {
139
141
  if (!t?.version)
140
142
  throw new g("Contractor version is required for updates");
@@ -149,11 +151,11 @@ function $e({
149
151
  });
150
152
  if (!l.contractor)
151
153
  throw new g("Contractor update failed");
152
- p = l.contractor;
154
+ w = l.contractor;
153
155
  }
154
156
  E = {
155
157
  mode: c ? "create" : "update",
156
- data: p
158
+ data: w
157
159
  };
158
160
  }), M();
159
161
  },
@@ -183,8 +185,8 @@ function $e({
183
185
  SelfOnboarding: u && _ ? ve : void 0,
184
186
  FileNewHireReport: s ? ye : void 0,
185
187
  Email: r || G ? Se : void 0,
186
- FirstName: s ? we : void 0,
187
- LastName: s ? pe : void 0,
188
+ FirstName: s ? pe : void 0,
189
+ LastName: s ? we : void 0,
188
190
  MiddleInitial: s ? Ne : void 0,
189
191
  BusinessName: T ? ge : void 0,
190
192
  Ssn: s ? fe : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"useContractorDetailsForm.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport type { ComponentType } from 'react'\nimport { useForm, useWatch } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport type { ContractorCreateRequestBody } from '@gusto/embedded-api/models/components/contractorcreaterequestbody'\nimport type { ContractorUpdateRequestBody } from '@gusto/embedded-api/models/components/contractorupdaterequestbody'\nimport { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport { useContractorsCreateMutation } from '@gusto/embedded-api/react-query/contractorsCreate'\nimport { useContractorsUpdateMutation } from '@gusto/embedded-api/react-query/contractorsUpdate'\nimport {\n ContractorType,\n WageType,\n createContractorDetailsSchema,\n type ContractorDetailsOptionalFieldsToRequire,\n type ContractorDetailsFormData,\n type ContractorDetailsFormOutputs,\n} from './contractorDetailsSchema'\nimport {\n TypeField,\n WageTypeField,\n StartDateField,\n HourlyRateField,\n SelfOnboardingField,\n FileNewHireReportField,\n EmailField,\n FirstNameField,\n LastNameField,\n MiddleInitialField,\n BusinessNameField,\n SsnField,\n EinField,\n WorkStateField,\n} from './fields'\nimport type {\n TypeFieldProps,\n WageTypeFieldProps,\n StartDateFieldProps,\n HourlyRateFieldProps,\n SelfOnboardingFieldProps,\n FileNewHireReportFieldProps,\n EmailFieldProps,\n FirstNameFieldProps,\n LastNameFieldProps,\n MiddleInitialFieldProps,\n BusinessNameFieldProps,\n SsnFieldProps,\n EinFieldProps,\n WorkStateFieldProps,\n} from './fields'\nimport { useDeriveFieldsMetadata } from '@/partner-hook-utils/form/useDeriveFieldsMetadata'\nimport { useHookFormInternals } from '@/partner-hook-utils/form/useHookFormInternals'\nimport { createGetFormSubmissionValues } from '@/partner-hook-utils/form/getFormSubmissionValues'\nimport { withOptions } from '@/partner-hook-utils/form/withOptions'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseFormHookReady,\n FieldMetadata,\n FieldsMetadata,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport {\n ContractorSelfOnboardingStatuses,\n ContractorOnboardingStatus,\n STATES_ABBR,\n} from '@/shared/constants'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { removeNonDigits } from '@/helpers/formattedStrings'\n\nexport type { ContractorDetailsOptionalFieldsToRequire } from './contractorDetailsSchema'\n\n/**\n * Optional overrides passed to {@link UseContractorDetailsFormReady.actions.onSubmit | onSubmit}.\n *\n * @public\n */\nexport interface ContractorDetailsSubmitOptions {\n /** Override the company identifier supplied to the hook (e.g. after creating the company in the same flow). Only used in create mode. */\n companyId?: string\n}\n\n/**\n * Shared options merged into both branches of {@link UseContractorDetailsFormProps}.\n *\n * @public\n */\nexport type UseContractorDetailsFormSharedProps = {\n /** Whether to expose the self-onboarding toggle as `form.Fields.SelfOnboarding`. Defaults to `true`. */\n withSelfOnboardingField?: boolean\n /**\n * Whether `form.Fields.Email` is available regardless of the `selfOnboarding` value.\n *\n * @remarks\n * By default `Email` is only exposed while `selfOnboarding` is `true`, since email is\n * otherwise only collected to send a self-onboarding invite. Set this to `true` for\n * surfaces that let an admin edit an already-onboarded contractor's email directly.\n * Defaults to `false`.\n */\n showEmailField?: boolean\n /** Fields that are optional by default but should be promoted to required for this form instance. */\n optionalFieldsToRequire?: ContractorDetailsOptionalFieldsToRequire\n /** Initial values applied before any contractor data loads. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When validation runs. Forwarded to react-hook-form's `mode`. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Whether react-hook-form should focus the first error on validation failure. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Options for {@link useContractorDetailsForm}.\n *\n * @remarks\n * Discriminated by mode: in create mode supply `companyId` and omit\n * `contractorId`; in update mode supply `contractorId` (and optionally\n * `companyId`).\n *\n * @public\n */\nexport type UseContractorDetailsFormProps =\n | (UseContractorDetailsFormSharedProps & { companyId: string; contractorId?: never })\n | (UseContractorDetailsFormSharedProps & { contractorId: string; companyId?: string })\n\n/**\n * The Field components exposed by {@link useContractorDetailsForm} as `form.Fields`.\n *\n * @remarks\n * Conditionally-visible fields are `undefined` when they do not apply to the\n * current `type`, `wageType`, or self-onboarding selection. Always null-check\n * before rendering.\n *\n * @public\n */\nexport interface ContractorDetailsFormFields {\n /** Radio group bound to `type`. Always available. */\n Type: ComponentType<TypeFieldProps>\n /** Radio group bound to `wageType`. Always available. */\n WageType: ComponentType<WageTypeFieldProps>\n /** Date picker bound to `startDate`. Always available. */\n StartDate: ComponentType<StartDateFieldProps>\n /** Number input bound to `hourlyRate`; available only when `wageType` is `Hourly`. */\n HourlyRate: ComponentType<HourlyRateFieldProps> | undefined\n /** Switch bound to `selfOnboarding`; available only when toggleable. */\n SelfOnboarding: ComponentType<SelfOnboardingFieldProps> | undefined\n /** Switch bound to `fileNewHireReport`; available only for individual contractors. */\n FileNewHireReport: ComponentType<FileNewHireReportFieldProps> | undefined\n /** Text input bound to `email`; available only when self-onboarding is enabled. */\n Email: ComponentType<EmailFieldProps> | undefined\n /** Text input bound to `firstName`; available only for individual contractors. */\n FirstName: ComponentType<FirstNameFieldProps> | undefined\n /** Text input bound to `lastName`; available only for individual contractors. */\n LastName: ComponentType<LastNameFieldProps> | undefined\n /** Text input bound to `middleInitial`; available only for individual contractors. */\n MiddleInitial: ComponentType<MiddleInitialFieldProps> | undefined\n /** Text input bound to `businessName`; available only for business contractors. */\n BusinessName: ComponentType<BusinessNameFieldProps> | undefined\n /**\n * Text input bound to `ssn`; available only for individual contractors.\n * Auto-formats as `XXX-XX-XXXX`. When an SSN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ssn: ComponentType<SsnFieldProps> | undefined\n /**\n * Text input bound to `ein`; available only for business contractors.\n * Auto-formats as `XX-XXXXXXX`. When an EIN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ein: ComponentType<EinFieldProps> | undefined\n /** Select bound to `workState`; available only for individual contractors filing a new-hire report. */\n WorkState: ComponentType<WorkStateFieldProps> | undefined\n}\n\n/**\n * The ready-state result returned by {@link useContractorDetailsForm} once data has loaded.\n *\n * @public\n */\nexport interface UseContractorDetailsFormReady extends BaseFormHookReady<\n ContractorDetailsFieldsMetadata,\n ContractorDetailsFormData,\n ContractorDetailsFormFields\n> {\n /** The loaded contractor data, or `null` in create mode. */\n data: {\n /** The contractor being edited, or `null` in create mode. */\n contractor: Contractor | null\n }\n /** Submit status and form mode. */\n status: {\n /** `true` while the create or update mutation is in flight. */\n isPending: boolean\n /** `'create'` when no `contractorId` was supplied, `'update'` otherwise. */\n mode: 'create' | 'update'\n }\n /** Submit and related actions. */\n actions: {\n /** Validates the form and submits the changes. Returns the created or updated contractor, or `undefined` when validation fails. */\n onSubmit: (\n options?: ContractorDetailsSubmitOptions,\n ) => Promise<HookSubmitResult<Contractor> | undefined>\n }\n}\n\nconst isCurrentlySelfOnboarding = (contractor?: Contractor) =>\n !!contractor?.onboardingStatus &&\n ContractorSelfOnboardingStatuses.has(contractor.onboardingStatus)\n\nconst canToggleSelfOnboarding = (contractor?: Contractor) => {\n if (!contractor) return true\n return (\n contractor.onboardingStatus === ContractorOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n contractor.onboardingStatus === ContractorOnboardingStatus.SELF_ONBOARDING_NOT_INVITED\n )\n}\n\n/** @internal */\nfunction buildContractorDetailsFieldsMetadata(\n base: Record<keyof ContractorDetailsFormData, FieldMetadata>,\n) {\n const typeEntries = [ContractorType.Individual, ContractorType.Business]\n const wageTypeEntries = [WageType.Hourly, WageType.Fixed]\n return {\n type: withOptions(\n base.type,\n typeEntries.map(value => ({ value, label: value })),\n typeEntries,\n ),\n wageType: withOptions(\n base.wageType,\n wageTypeEntries.map(value => ({ value, label: value })),\n wageTypeEntries,\n ),\n startDate: base.startDate,\n hourlyRate: base.hourlyRate,\n selfOnboarding: base.selfOnboarding,\n fileNewHireReport: base.fileNewHireReport,\n email: base.email,\n firstName: base.firstName,\n lastName: base.lastName,\n middleInitial: base.middleInitial,\n businessName: base.businessName,\n ssn: base.ssn,\n ein: base.ein,\n workState: withOptions(\n base.workState,\n STATES_ABBR.map(abbr => ({ value: abbr, label: abbr })),\n STATES_ABBR,\n ),\n } satisfies FieldsMetadata\n}\n\n/**\n * Headless hook for creating or updating a contractor's profile details —\n * individual vs. business type, wage type, names, SSN/EIN, work state, and the\n * self-onboarding preference.\n *\n * @remarks\n * Returns a discriminated union: a loading variant while the contractor fetch\n * resolves, and a ready variant exposing the form's data, pending status,\n * submit action, error handling, and bound `Fields`. Field visibility is\n * driven by the current `type` and `wageType` (self-onboarding toggles the\n * `Email` field unless `showEmailField` is set); fields that do not apply are `undefined` on `form.Fields`.\n * SSN/EIN are exposed by contractor type regardless of self-onboarding — each\n * consumer decides whether to render them. Self-onboarding is only toggleable\n * when the contractor's onboarding status allows it.\n *\n * @param input - See {@link UseContractorDetailsFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseContractorDetailsFormReady} once ready.\n * @public\n *\n * @example\n * ```tsx\n * import {\n * useContractorDetailsForm,\n * SDKFormProvider,\n * type UseContractorDetailsFormReady,\n * } from '@gusto/embedded-react-sdk'\n *\n * function ContractorDetailsPage({\n * companyId,\n * contractorId,\n * }: {\n * companyId: string\n * contractorId: string\n * }) {\n * const contractorDetails = useContractorDetailsForm({ companyId, contractorId })\n *\n * if (contractorDetails.isLoading) return <div>Loading...</div>\n *\n * return <ContractorDetailsReady contractorDetails={contractorDetails} />\n * }\n *\n * function ContractorDetailsReady({\n * contractorDetails,\n * }: {\n * contractorDetails: UseContractorDetailsFormReady\n * }) {\n * const { Fields } = contractorDetails.form\n *\n * return (\n * <SDKFormProvider formHookResult={contractorDetails}>\n * <form onSubmit={e => { e.preventDefault(); void contractorDetails.actions.onSubmit() }}>\n * <Fields.Type label=\"Contractor type\" />\n * <Fields.WageType label=\"Wage type\" />\n * {Fields.FirstName && <Fields.FirstName label=\"First name\" />}\n * {Fields.LastName && <Fields.LastName label=\"Last name\" />}\n * {Fields.BusinessName && <Fields.BusinessName label=\"Business name\" />}\n * <Fields.StartDate label=\"Start date\" />\n * <button type=\"submit\" disabled={contractorDetails.status.isPending}>Save</button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useContractorDetailsForm({\n companyId,\n contractorId,\n withSelfOnboardingField = true,\n showEmailField = false,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseContractorDetailsFormProps): HookLoadingResult | UseContractorDetailsFormReady {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId ?? '' },\n { enabled: !!contractorId },\n )\n\n const contractor = contractorQuery.data?.contractor\n\n const isCreateMode = !contractorId\n const isSelfOnboardingToggleable = canToggleSelfOnboarding(contractor)\n\n const mode = isCreateMode ? 'create' : 'update'\n const hasSsn = contractor?.hasSsn ?? false\n const hasEin = contractor?.hasEin ?? false\n\n const [schema, metadataConfig] = useMemo(\n () => createContractorDetailsSchema({ mode, optionalFieldsToRequire, hasSsn, hasEin }),\n [mode, optionalFieldsToRequire, hasSsn, hasEin],\n )\n\n const parsedHourlyRate =\n contractor?.hourlyRate != null ? parseFloat(contractor.hourlyRate) : undefined\n\n const resolvedDefaults: ContractorDetailsFormData = useMemo(\n () => ({\n type: contractor?.type ?? partnerDefaults?.type ?? ContractorType.Individual,\n wageType: contractor?.wageType ?? partnerDefaults?.wageType ?? WageType.Fixed,\n startDate:\n contractor?.startDate ??\n partnerDefaults?.startDate ??\n new Date().toISOString().split('T')[0]!,\n hourlyRate: parsedHourlyRate ?? partnerDefaults?.hourlyRate ?? NaN,\n selfOnboarding: partnerDefaults?.selfOnboarding ?? isCurrentlySelfOnboarding(contractor),\n fileNewHireReport:\n contractor?.fileNewHireReport ?? partnerDefaults?.fileNewHireReport ?? false,\n email: contractor?.email ?? partnerDefaults?.email ?? '',\n firstName: contractor?.firstName ?? partnerDefaults?.firstName ?? '',\n lastName: contractor?.lastName ?? partnerDefaults?.lastName ?? '',\n middleInitial: contractor?.middleInitial ?? partnerDefaults?.middleInitial ?? '',\n businessName: contractor?.businessName ?? partnerDefaults?.businessName ?? '',\n workState: contractor?.workState ?? partnerDefaults?.workState ?? '',\n ssn: partnerDefaults?.ssn ?? '',\n ein: partnerDefaults?.ein ?? '',\n }),\n [contractor, partnerDefaults, parsedHourlyRate],\n )\n\n const formMethods = useForm<ContractorDetailsFormData, unknown, ContractorDetailsFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const [watchedType, watchedWageType, watchedSelfOnboarding, watchedFileNewHireReport] = useWatch({\n control: formMethods.control,\n name: ['type', 'wageType', 'selfOnboarding', 'fileNewHireReport'],\n })\n\n // Render-gating: a field shows when it applies to the current selection. The\n // schema mirrors this via `getExcludedContractorFields` so off-screen fields\n // never trip a phantom required error.\n const isIndividual = watchedType === ContractorType.Individual\n const isBusiness = watchedType === ContractorType.Business\n const isHourly = watchedWageType === WageType.Hourly\n\n const createContractorMutation = useContractorsCreateMutation()\n const updateContractorMutation = useContractorsUpdateMutation()\n\n const isPending = createContractorMutation.isPending || updateContractorMutation.isPending\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorDetailsForm')\n\n const queries = contractorId ? [contractorQuery] : []\n const errorHandling = composeErrorHandler(queries, { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = buildContractorDetailsFieldsMetadata(baseMetadata)\n\n const onSubmit = async (\n options?: ContractorDetailsSubmitOptions,\n ): Promise<HookSubmitResult<Contractor> | undefined> => {\n let submitResult: HookSubmitResult<Contractor> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: ContractorDetailsFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const selfOnboardingEnabled = payload.selfOnboarding\n const cleanedSsn = payload.ssn ? removeNonDigits(payload.ssn) : ''\n const cleanedEin = payload.ein ? removeNonDigits(payload.ein) : ''\n\n const requestBody: ContractorCreateRequestBody = {\n type: payload.type,\n wageType: payload.wageType,\n startDate: payload.startDate,\n selfOnboarding: selfOnboardingEnabled,\n email:\n showEmailField || selfOnboardingEnabled ? payload.email || undefined : undefined,\n hourlyRate:\n payload.wageType === WageType.Hourly ? String(payload.hourlyRate) : undefined,\n ...(payload.type === ContractorType.Individual\n ? {\n firstName: payload.firstName,\n lastName: payload.lastName,\n middleInitial: payload.middleInitial || undefined,\n fileNewHireReport: payload.fileNewHireReport,\n workState: payload.fileNewHireReport\n ? payload.workState || undefined\n : undefined,\n ssn: cleanedSsn || undefined,\n }\n : {\n fileNewHireReport: false,\n businessName: payload.businessName,\n ein: cleanedEin || undefined,\n }),\n }\n\n let savedContractor: Contractor\n\n if (isCreateMode) {\n const resolvedCompanyId = options?.companyId ?? companyId\n if (!resolvedCompanyId) {\n throw new SDKInternalError('companyId is required to create a contractor')\n }\n\n const result = await createContractorMutation.mutateAsync({\n request: {\n companyUuid: resolvedCompanyId,\n contractorCreateRequestBody: { ...requestBody, isActive: true },\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor creation failed')\n }\n\n savedContractor = result.contractor\n } else {\n if (!contractor?.version) {\n throw new SDKInternalError('Contractor version is required for updates')\n }\n\n const updateBody: ContractorUpdateRequestBody = {\n ...requestBody,\n version: contractor.version,\n }\n\n const result = await updateContractorMutation.mutateAsync({\n request: {\n contractorUuid: contractor.uuid,\n contractorUpdateRequestBody: updateBody,\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor update failed')\n }\n\n savedContractor = result.contractor\n }\n\n submitResult = {\n mode: isCreateMode ? 'create' : 'update',\n data: savedContractor,\n }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n const isDataLoading = contractorId ? contractorQuery.isLoading : false\n\n if (isDataLoading || (contractorId && !contractor)) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n contractor: contractor ?? null,\n },\n status: {\n isPending,\n mode: isCreateMode ? ('create' as const) : ('update' as const),\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n Type: TypeField,\n WageType: WageTypeField,\n StartDate: StartDateField,\n HourlyRate: isHourly ? HourlyRateField : undefined,\n SelfOnboarding:\n withSelfOnboardingField && isSelfOnboardingToggleable ? SelfOnboardingField : undefined,\n FileNewHireReport: isIndividual ? FileNewHireReportField : undefined,\n Email: showEmailField || watchedSelfOnboarding ? EmailField : undefined,\n FirstName: isIndividual ? FirstNameField : undefined,\n LastName: isIndividual ? LastNameField : undefined,\n MiddleInitial: isIndividual ? MiddleInitialField : undefined,\n BusinessName: isBusiness ? BusinessNameField : undefined,\n Ssn: isIndividual ? SsnField : undefined,\n Ein: isBusiness ? EinField : undefined,\n WorkState: isIndividual && watchedFileNewHireReport ? WorkStateField : undefined,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Return type of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type UseContractorDetailsFormResult = HookLoadingResult | UseContractorDetailsFormReady\n\n/**\n * Shape of `form.fieldsMetadata` returned by {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type ContractorDetailsFieldsMetadata = ReturnType<\n typeof buildContractorDetailsFieldsMetadata\n>\n"],"names":["isCurrentlySelfOnboarding","contractor","ContractorSelfOnboardingStatuses","canToggleSelfOnboarding","ContractorOnboardingStatus","buildContractorDetailsFieldsMetadata","base","typeEntries","ContractorType","wageTypeEntries","WageType","withOptions","value","STATES_ABBR","abbr","useContractorDetailsForm","companyId","contractorId","withSelfOnboardingField","showEmailField","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","contractorQuery","useContractorsGet","isCreateMode","isSelfOnboardingToggleable","mode","hasSsn","hasEin","schema","metadataConfig","useMemo","createContractorDetailsSchema","parsedHourlyRate","resolvedDefaults","formMethods","useForm","zodResolver","watchedType","watchedWageType","watchedSelfOnboarding","watchedFileNewHireReport","useWatch","isIndividual","isBusiness","isHourly","createContractorMutation","useContractorsCreateMutation","updateContractorMutation","useContractorsUpdateMutation","isPending","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","onSubmit","options","submitResult","resolve","data","payload","selfOnboardingEnabled","cleanedSsn","removeNonDigits","cleanedEin","requestBody","savedContractor","resolvedCompanyId","SDKInternalError","result","updateBody","hookFormInternals","useHookFormInternals","TypeField","WageTypeField","StartDateField","HourlyRateField","SelfOnboardingField","FileNewHireReportField","EmailField","FirstNameField","LastNameField","MiddleInitialField","BusinessNameField","SsnField","EinField","WorkStateField","createGetFormSubmissionValues"],"mappings":"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"}
1
+ {"version":3,"file":"useContractorDetailsForm.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport type { ComponentType } from 'react'\nimport { useForm, useWatch } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport type { ContractorCreateRequestBody } from '@gusto/embedded-api/models/components/contractorcreaterequestbody'\nimport type { ContractorUpdateRequestBody } from '@gusto/embedded-api/models/components/contractorupdaterequestbody'\nimport { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport { useContractorsCreateMutation } from '@gusto/embedded-api/react-query/contractorsCreate'\nimport { useContractorsUpdateMutation } from '@gusto/embedded-api/react-query/contractorsUpdate'\nimport {\n ContractorType,\n WageType,\n createContractorDetailsSchema,\n type ContractorDetailsOptionalFieldsToRequire,\n type ContractorDetailsFormData,\n type ContractorDetailsFormOutputs,\n} from './contractorDetailsSchema'\nimport {\n TypeField,\n WageTypeField,\n StartDateField,\n HourlyRateField,\n SelfOnboardingField,\n FileNewHireReportField,\n EmailField,\n FirstNameField,\n LastNameField,\n MiddleInitialField,\n BusinessNameField,\n SsnField,\n EinField,\n WorkStateField,\n} from './fields'\nimport type {\n TypeFieldProps,\n WageTypeFieldProps,\n StartDateFieldProps,\n HourlyRateFieldProps,\n SelfOnboardingFieldProps,\n FileNewHireReportFieldProps,\n EmailFieldProps,\n FirstNameFieldProps,\n LastNameFieldProps,\n MiddleInitialFieldProps,\n BusinessNameFieldProps,\n SsnFieldProps,\n EinFieldProps,\n WorkStateFieldProps,\n} from './fields'\nimport { useDeriveFieldsMetadata } from '@/partner-hook-utils/form/useDeriveFieldsMetadata'\nimport { useHookFormInternals } from '@/partner-hook-utils/form/useHookFormInternals'\nimport { createGetFormSubmissionValues } from '@/partner-hook-utils/form/getFormSubmissionValues'\nimport { withOptions } from '@/partner-hook-utils/form/withOptions'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type {\n BaseFormHookReady,\n FieldMetadata,\n FieldsMetadata,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport {\n ContractorSelfOnboardingStatuses,\n ContractorOnboardingStatus,\n STATES_ABBR,\n} from '@/shared/constants'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { removeNonDigits } from '@/helpers/formattedStrings'\n\nexport type { ContractorDetailsOptionalFieldsToRequire } from './contractorDetailsSchema'\n\n/**\n * Optional overrides passed to {@link UseContractorDetailsFormReady.actions.onSubmit | onSubmit}.\n *\n * @public\n */\nexport interface ContractorDetailsSubmitOptions {\n /** Override the company identifier supplied to the hook (e.g. after creating the company in the same flow). Only used in create mode. */\n companyId?: string\n}\n\n/**\n * Shared options merged into both branches of {@link UseContractorDetailsFormProps}.\n *\n * @public\n */\nexport type UseContractorDetailsFormSharedProps = {\n /** Whether to expose the self-onboarding toggle as `form.Fields.SelfOnboarding`. Defaults to `true`. */\n withSelfOnboardingField?: boolean\n /**\n * Whether `form.Fields.Email` is available regardless of the `selfOnboarding` value.\n *\n * @remarks\n * By default `Email` is only exposed while `selfOnboarding` is `true`, since email is\n * otherwise only collected to send a self-onboarding invite. Set this to `true` for\n * surfaces that let an admin edit an already-onboarded contractor's email directly.\n * Defaults to `false`.\n */\n showEmailField?: boolean\n /** Fields that are optional by default but should be promoted to required for this form instance. */\n optionalFieldsToRequire?: ContractorDetailsOptionalFieldsToRequire\n /** Initial values applied before any contractor data loads. */\n defaultValues?: Partial<ContractorDetailsFormData>\n /** When validation runs. Forwarded to react-hook-form's `mode`. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Whether react-hook-form should focus the first error on validation failure. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Options for {@link useContractorDetailsForm}.\n *\n * @remarks\n * Discriminated by mode: in create mode supply `companyId` and omit\n * `contractorId`; in update mode supply `contractorId` (and optionally\n * `companyId`).\n *\n * @public\n */\nexport type UseContractorDetailsFormProps =\n | (UseContractorDetailsFormSharedProps & { companyId: string; contractorId?: never })\n | (UseContractorDetailsFormSharedProps & { contractorId: string; companyId?: string })\n\n/**\n * The Field components exposed by {@link useContractorDetailsForm} as `form.Fields`.\n *\n * @remarks\n * Conditionally-visible fields are `undefined` when they do not apply to the\n * current `type`, `wageType`, or self-onboarding selection. Always null-check\n * before rendering.\n *\n * @public\n */\nexport interface ContractorDetailsFormFields {\n /** Radio group bound to `type`. Always available. */\n Type: ComponentType<TypeFieldProps>\n /** Radio group bound to `wageType`. Always available. */\n WageType: ComponentType<WageTypeFieldProps>\n /** Date picker bound to `startDate`. Always available. */\n StartDate: ComponentType<StartDateFieldProps>\n /** Number input bound to `hourlyRate`; available only when `wageType` is `Hourly`. */\n HourlyRate: ComponentType<HourlyRateFieldProps> | undefined\n /** Switch bound to `selfOnboarding`; available only when toggleable. */\n SelfOnboarding: ComponentType<SelfOnboardingFieldProps> | undefined\n /** Switch bound to `fileNewHireReport`; available only for individual contractors. */\n FileNewHireReport: ComponentType<FileNewHireReportFieldProps> | undefined\n /** Text input bound to `email`; available only when self-onboarding is enabled. */\n Email: ComponentType<EmailFieldProps> | undefined\n /** Text input bound to `firstName`; available only for individual contractors. */\n FirstName: ComponentType<FirstNameFieldProps> | undefined\n /** Text input bound to `lastName`; available only for individual contractors. */\n LastName: ComponentType<LastNameFieldProps> | undefined\n /** Text input bound to `middleInitial`; available only for individual contractors. */\n MiddleInitial: ComponentType<MiddleInitialFieldProps> | undefined\n /** Text input bound to `businessName`; available only for business contractors. */\n BusinessName: ComponentType<BusinessNameFieldProps> | undefined\n /**\n * Text input bound to `ssn`; available only for individual contractors.\n * Auto-formats as `XXX-XX-XXXX`. When an SSN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ssn: ComponentType<SsnFieldProps> | undefined\n /**\n * Text input bound to `ein`; available only for business contractors.\n * Auto-formats as `XX-XXXXXXX`. When an EIN is already on file the field\n * shows a masked placeholder and the required rule is waived.\n */\n Ein: ComponentType<EinFieldProps> | undefined\n /** Select bound to `workState`; available only for individual contractors filing a new-hire report. */\n WorkState: ComponentType<WorkStateFieldProps> | undefined\n}\n\n/**\n * The ready-state result returned by {@link useContractorDetailsForm} once data has loaded.\n *\n * @public\n */\nexport interface UseContractorDetailsFormReady extends BaseFormHookReady<\n ContractorDetailsFieldsMetadata,\n ContractorDetailsFormData,\n ContractorDetailsFormFields\n> {\n /** The loaded contractor data, or `null` in create mode. */\n data: {\n /** The contractor being edited, or `null` in create mode. */\n contractor: Contractor | null\n }\n /** Submit status and form mode. */\n status: {\n /** `true` while the create or update mutation is in flight. */\n isPending: boolean\n /** `'create'` when no `contractorId` was supplied, `'update'` otherwise. */\n mode: 'create' | 'update'\n }\n /** Submit and related actions. */\n actions: {\n /** Validates the form and submits the changes. Returns the created or updated contractor, or `undefined` when validation fails. */\n onSubmit: (\n options?: ContractorDetailsSubmitOptions,\n ) => Promise<HookSubmitResult<Contractor> | undefined>\n }\n}\n\nconst isCurrentlySelfOnboarding = (contractor?: Contractor) =>\n !!contractor?.onboardingStatus &&\n ContractorSelfOnboardingStatuses.has(contractor.onboardingStatus)\n\nconst canToggleSelfOnboarding = (contractor?: Contractor) => {\n if (!contractor) return true\n return (\n contractor.onboardingStatus === ContractorOnboardingStatus.ADMIN_ONBOARDING_INCOMPLETE ||\n contractor.onboardingStatus === ContractorOnboardingStatus.SELF_ONBOARDING_NOT_INVITED\n )\n}\n\n/** @internal */\nfunction buildContractorDetailsFieldsMetadata(\n base: Record<keyof ContractorDetailsFormData, FieldMetadata>,\n) {\n const typeEntries = [ContractorType.Individual, ContractorType.Business]\n const wageTypeEntries = [WageType.Hourly, WageType.Fixed]\n return {\n type: withOptions(\n base.type,\n typeEntries.map(value => ({ value, label: value })),\n typeEntries,\n ),\n wageType: withOptions(\n base.wageType,\n wageTypeEntries.map(value => ({ value, label: value })),\n wageTypeEntries,\n ),\n startDate: base.startDate,\n hourlyRate: base.hourlyRate,\n selfOnboarding: base.selfOnboarding,\n fileNewHireReport: base.fileNewHireReport,\n email: base.email,\n firstName: base.firstName,\n lastName: base.lastName,\n middleInitial: base.middleInitial,\n businessName: base.businessName,\n ssn: base.ssn,\n ein: base.ein,\n workState: withOptions(\n base.workState,\n STATES_ABBR.map(abbr => ({ value: abbr, label: abbr })),\n STATES_ABBR,\n ),\n } satisfies FieldsMetadata\n}\n\n/**\n * Headless hook for creating or updating a contractor's profile details —\n * individual vs. business type, wage type, names, SSN/EIN, work state, and the\n * self-onboarding preference.\n *\n * @remarks\n * Returns a discriminated union: a loading variant while the contractor fetch\n * resolves, and a ready variant exposing the form's data, pending status,\n * submit action, error handling, and bound `Fields`. Field visibility is\n * driven by the current `type` and `wageType` (self-onboarding toggles the\n * `Email` field unless `showEmailField` is set); fields that do not apply are `undefined` on `form.Fields`.\n * SSN/EIN are exposed by contractor type regardless of self-onboarding — each\n * consumer decides whether to render them. Self-onboarding is only toggleable\n * when the contractor's onboarding status allows it.\n *\n * @param input - See {@link UseContractorDetailsFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseContractorDetailsFormReady} once ready.\n * @public\n *\n * @example\n * ```tsx\n * import {\n * useContractorDetailsForm,\n * SDKFormProvider,\n * type UseContractorDetailsFormReady,\n * } from '@gusto/embedded-react-sdk'\n *\n * function ContractorDetailsPage({\n * companyId,\n * contractorId,\n * }: {\n * companyId: string\n * contractorId: string\n * }) {\n * const contractorDetails = useContractorDetailsForm({ companyId, contractorId })\n *\n * if (contractorDetails.isLoading) return <div>Loading...</div>\n *\n * return <ContractorDetailsReady contractorDetails={contractorDetails} />\n * }\n *\n * function ContractorDetailsReady({\n * contractorDetails,\n * }: {\n * contractorDetails: UseContractorDetailsFormReady\n * }) {\n * const { Fields } = contractorDetails.form\n *\n * return (\n * <SDKFormProvider formHookResult={contractorDetails}>\n * <form onSubmit={e => { e.preventDefault(); void contractorDetails.actions.onSubmit() }}>\n * <Fields.Type label=\"Contractor type\" />\n * <Fields.WageType label=\"Wage type\" />\n * {Fields.FirstName && <Fields.FirstName label=\"First name\" />}\n * {Fields.LastName && <Fields.LastName label=\"Last name\" />}\n * {Fields.BusinessName && <Fields.BusinessName label=\"Business name\" />}\n * <Fields.StartDate label=\"Start date\" />\n * <button type=\"submit\" disabled={contractorDetails.status.isPending}>Save</button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useContractorDetailsForm({\n companyId,\n contractorId,\n withSelfOnboardingField = true,\n showEmailField = false,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseContractorDetailsFormProps): HookLoadingResult | UseContractorDetailsFormReady {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId ?? '' },\n { enabled: !!contractorId },\n )\n\n const contractor = contractorQuery.data?.contractorShow\n\n const isCreateMode = !contractorId\n const isSelfOnboardingToggleable = canToggleSelfOnboarding(contractor)\n\n const mode = isCreateMode ? 'create' : 'update'\n const hasSsn = contractor?.hasSsn ?? false\n const hasEin = contractor?.hasEin ?? false\n\n const [schema, metadataConfig] = useMemo(\n () => createContractorDetailsSchema({ mode, optionalFieldsToRequire, hasSsn, hasEin }),\n [mode, optionalFieldsToRequire, hasSsn, hasEin],\n )\n\n const parsedHourlyRate =\n contractor?.hourlyRate != null ? parseFloat(contractor.hourlyRate) : undefined\n\n const resolvedDefaults: ContractorDetailsFormData = useMemo(\n () => ({\n type: contractor?.type ?? partnerDefaults?.type ?? ContractorType.Individual,\n wageType: contractor?.wageType ?? partnerDefaults?.wageType ?? WageType.Fixed,\n startDate:\n contractor?.startDate ??\n partnerDefaults?.startDate ??\n new Date().toISOString().split('T')[0]!,\n hourlyRate: parsedHourlyRate ?? partnerDefaults?.hourlyRate ?? NaN,\n selfOnboarding: partnerDefaults?.selfOnboarding ?? isCurrentlySelfOnboarding(contractor),\n fileNewHireReport:\n contractor?.fileNewHireReport ?? partnerDefaults?.fileNewHireReport ?? false,\n email: contractor?.email ?? partnerDefaults?.email ?? '',\n firstName: contractor?.firstName ?? partnerDefaults?.firstName ?? '',\n lastName: contractor?.lastName ?? partnerDefaults?.lastName ?? '',\n middleInitial: contractor?.middleInitial ?? partnerDefaults?.middleInitial ?? '',\n businessName: contractor?.businessName ?? partnerDefaults?.businessName ?? '',\n workState: contractor?.workState ?? partnerDefaults?.workState ?? '',\n ssn: partnerDefaults?.ssn ?? '',\n ein: partnerDefaults?.ein ?? '',\n }),\n [contractor, partnerDefaults, parsedHourlyRate],\n )\n\n const formMethods = useForm<ContractorDetailsFormData, unknown, ContractorDetailsFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const [watchedType, watchedWageType, watchedSelfOnboarding, watchedFileNewHireReport] = useWatch({\n control: formMethods.control,\n name: ['type', 'wageType', 'selfOnboarding', 'fileNewHireReport'],\n })\n\n // Render-gating: a field shows when it applies to the current selection. The\n // schema mirrors this via `getExcludedContractorFields` so off-screen fields\n // never trip a phantom required error.\n const isIndividual = watchedType === ContractorType.Individual\n const isBusiness = watchedType === ContractorType.Business\n const isHourly = watchedWageType === WageType.Hourly\n\n const createContractorMutation = useContractorsCreateMutation()\n const updateContractorMutation = useContractorsUpdateMutation()\n\n const isPending = createContractorMutation.isPending || updateContractorMutation.isPending\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorDetailsForm')\n\n const queries = contractorId ? [contractorQuery] : []\n const errorHandling = composeErrorHandler(queries, { submitError, setSubmitError })\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = buildContractorDetailsFieldsMetadata(baseMetadata)\n\n const onSubmit = async (\n options?: ContractorDetailsSubmitOptions,\n ): Promise<HookSubmitResult<Contractor> | undefined> => {\n let submitResult: HookSubmitResult<Contractor> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: ContractorDetailsFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const selfOnboardingEnabled = payload.selfOnboarding\n const cleanedSsn = payload.ssn ? removeNonDigits(payload.ssn) : ''\n const cleanedEin = payload.ein ? removeNonDigits(payload.ein) : ''\n\n const requestBody: ContractorCreateRequestBody = {\n type: payload.type,\n wageType: payload.wageType,\n startDate: payload.startDate,\n selfOnboarding: selfOnboardingEnabled,\n email:\n showEmailField || selfOnboardingEnabled ? payload.email || undefined : undefined,\n // On update, an Hourly contractor with no stored rate has no `hourlyRate` value at\n // all; the finite check keeps that from serializing as the string \"undefined\".\n hourlyRate:\n payload.wageType === WageType.Hourly && Number.isFinite(payload.hourlyRate)\n ? String(payload.hourlyRate)\n : undefined,\n ...(payload.type === ContractorType.Individual\n ? {\n firstName: payload.firstName,\n lastName: payload.lastName,\n middleInitial: payload.middleInitial || undefined,\n fileNewHireReport: payload.fileNewHireReport,\n workState: payload.fileNewHireReport\n ? payload.workState || undefined\n : undefined,\n ssn: cleanedSsn || undefined,\n }\n : {\n fileNewHireReport: false,\n businessName: payload.businessName,\n ein: cleanedEin || undefined,\n }),\n }\n\n let savedContractor: Contractor\n\n if (isCreateMode) {\n const resolvedCompanyId = options?.companyId ?? companyId\n if (!resolvedCompanyId) {\n throw new SDKInternalError('companyId is required to create a contractor')\n }\n\n const result = await createContractorMutation.mutateAsync({\n request: {\n companyUuid: resolvedCompanyId,\n contractorCreateRequestBody: { ...requestBody, isActive: true },\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor creation failed')\n }\n\n savedContractor = result.contractor\n } else {\n if (!contractor?.version) {\n throw new SDKInternalError('Contractor version is required for updates')\n }\n\n const updateBody: ContractorUpdateRequestBody = {\n ...requestBody,\n version: contractor.version,\n }\n\n const result = await updateContractorMutation.mutateAsync({\n request: {\n contractorUuid: contractor.uuid,\n contractorUpdateRequestBody: updateBody,\n },\n })\n\n if (!result.contractor) {\n throw new SDKInternalError('Contractor update failed')\n }\n\n savedContractor = result.contractor\n }\n\n submitResult = {\n mode: isCreateMode ? 'create' : 'update',\n data: savedContractor,\n }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n const isDataLoading = contractorId ? contractorQuery.isLoading : false\n\n if (isDataLoading || (contractorId && !contractor)) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n contractor: contractor ?? null,\n },\n status: {\n isPending,\n mode: isCreateMode ? ('create' as const) : ('update' as const),\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n Type: TypeField,\n WageType: WageTypeField,\n StartDate: StartDateField,\n HourlyRate: isHourly ? HourlyRateField : undefined,\n SelfOnboarding:\n withSelfOnboardingField && isSelfOnboardingToggleable ? SelfOnboardingField : undefined,\n FileNewHireReport: isIndividual ? FileNewHireReportField : undefined,\n Email: showEmailField || watchedSelfOnboarding ? EmailField : undefined,\n FirstName: isIndividual ? FirstNameField : undefined,\n LastName: isIndividual ? LastNameField : undefined,\n MiddleInitial: isIndividual ? MiddleInitialField : undefined,\n BusinessName: isBusiness ? BusinessNameField : undefined,\n Ssn: isIndividual ? SsnField : undefined,\n Ein: isBusiness ? EinField : undefined,\n WorkState: isIndividual && watchedFileNewHireReport ? WorkStateField : undefined,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Return type of {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type UseContractorDetailsFormResult = HookLoadingResult | UseContractorDetailsFormReady\n\n/**\n * Shape of `form.fieldsMetadata` returned by {@link useContractorDetailsForm}.\n *\n * @public\n */\nexport type ContractorDetailsFieldsMetadata = ReturnType<\n typeof buildContractorDetailsFieldsMetadata\n>\n"],"names":["isCurrentlySelfOnboarding","contractor","ContractorSelfOnboardingStatuses","canToggleSelfOnboarding","ContractorOnboardingStatus","buildContractorDetailsFieldsMetadata","base","typeEntries","ContractorType","wageTypeEntries","WageType","withOptions","value","STATES_ABBR","abbr","useContractorDetailsForm","companyId","contractorId","withSelfOnboardingField","showEmailField","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","contractorQuery","useContractorsGet","isCreateMode","isSelfOnboardingToggleable","mode","hasSsn","hasEin","schema","metadataConfig","useMemo","createContractorDetailsSchema","parsedHourlyRate","resolvedDefaults","formMethods","useForm","zodResolver","watchedType","watchedWageType","watchedSelfOnboarding","watchedFileNewHireReport","useWatch","isIndividual","isBusiness","isHourly","createContractorMutation","useContractorsCreateMutation","updateContractorMutation","useContractorsUpdateMutation","isPending","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","onSubmit","options","submitResult","resolve","data","payload","selfOnboardingEnabled","cleanedSsn","removeNonDigits","cleanedEin","requestBody","savedContractor","resolvedCompanyId","SDKInternalError","result","updateBody","hookFormInternals","useHookFormInternals","TypeField","WageTypeField","StartDateField","HourlyRateField","SelfOnboardingField","FileNewHireReportField","EmailField","FirstNameField","LastNameField","MiddleInitialField","BusinessNameField","SsnField","EinField","WorkStateField","createGetFormSubmissionValues"],"mappings":"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"}
@@ -6,7 +6,7 @@ function c({
6
6
  const r = i(
7
7
  { contractorUuid: n },
8
8
  { staleTime: 1 / 0 }
9
- ), t = a([r]), o = r.data?.contractor;
9
+ ), t = a([r]), o = r.data?.contractorShow;
10
10
  return r.isLoading || !o ? { isLoading: !0, errorHandling: t } : {
11
11
  isLoading: !1,
12
12
  data: { contractor: o },
@@ -1 +1 @@
1
- {"version":3,"file":"useContractorProfileSummary.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorProfileSummary/useContractorProfileSummary.tsx"],"sourcesContent":["import { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type { BaseHookReady, HookLoadingResult } from '@/partner-hook-utils/types'\n\n/** @internal */\nexport interface UseContractorProfileSummaryParams {\n contractorId: string\n}\n\ntype UseContractorProfileSummaryReady = BaseHookReady<\n { contractor: Contractor },\n { isFetching: boolean; isPending: boolean }\n>\n\n/** @internal */\nexport type UseContractorProfileSummaryResult = HookLoadingResult | UseContractorProfileSummaryReady\n\n/** @internal */\nexport function useContractorProfileSummary({\n contractorId,\n}: UseContractorProfileSummaryParams): UseContractorProfileSummaryResult {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId },\n { staleTime: Infinity },\n )\n\n const errorHandling = composeErrorHandler([contractorQuery])\n\n const contractor = contractorQuery.data?.contractor\n\n if (contractorQuery.isLoading || !contractor) {\n return { isLoading: true, errorHandling }\n }\n\n return {\n isLoading: false,\n data: { contractor },\n status: {\n isFetching: contractorQuery.isFetching,\n isPending: false,\n },\n errorHandling,\n }\n}\n"],"names":["useContractorProfileSummary","contractorId","contractorQuery","useContractorsGet","errorHandling","composeErrorHandler","contractor"],"mappings":";;AAmBO,SAASA,EAA4B;AAAA,EAC1C,cAAAC;AACF,GAAyE;AACvE,QAAMC,IAAkBC;AAAA,IACtB,EAAE,gBAAgBF,EAAA;AAAA,IAClB,EAAE,WAAW,MAAA;AAAA,EAAS,GAGlBG,IAAgBC,EAAoB,CAACH,CAAe,CAAC,GAErDI,IAAaJ,EAAgB,MAAM;AAEzC,SAAIA,EAAgB,aAAa,CAACI,IACzB,EAAE,WAAW,IAAM,eAAAF,EAAA,IAGrB;AAAA,IACL,WAAW;AAAA,IACX,MAAM,EAAE,YAAAE,EAAA;AAAA,IACR,QAAQ;AAAA,MACN,YAAYJ,EAAgB;AAAA,MAC5B,WAAW;AAAA,IAAA;AAAA,IAEb,eAAAE;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useContractorProfileSummary.js","sources":["../../../../../../src/components/Contractor/Profile/shared/useContractorProfileSummary/useContractorProfileSummary.tsx"],"sourcesContent":["import { useContractorsGet } from '@gusto/embedded-api/react-query/contractorsGet'\nimport type { Contractor } from '@gusto/embedded-api/models/components/contractor'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type { BaseHookReady, HookLoadingResult } from '@/partner-hook-utils/types'\n\n/** @internal */\nexport interface UseContractorProfileSummaryParams {\n contractorId: string\n}\n\ntype UseContractorProfileSummaryReady = BaseHookReady<\n { contractor: Contractor },\n { isFetching: boolean; isPending: boolean }\n>\n\n/** @internal */\nexport type UseContractorProfileSummaryResult = HookLoadingResult | UseContractorProfileSummaryReady\n\n/** @internal */\nexport function useContractorProfileSummary({\n contractorId,\n}: UseContractorProfileSummaryParams): UseContractorProfileSummaryResult {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId },\n { staleTime: Infinity },\n )\n\n const errorHandling = composeErrorHandler([contractorQuery])\n\n const contractor = contractorQuery.data?.contractorShow\n\n if (contractorQuery.isLoading || !contractor) {\n return { isLoading: true, errorHandling }\n }\n\n return {\n isLoading: false,\n data: { contractor },\n status: {\n isFetching: contractorQuery.isFetching,\n isPending: false,\n },\n errorHandling,\n }\n}\n"],"names":["useContractorProfileSummary","contractorId","contractorQuery","useContractorsGet","errorHandling","composeErrorHandler","contractor"],"mappings":";;AAmBO,SAASA,EAA4B;AAAA,EAC1C,cAAAC;AACF,GAAyE;AACvE,QAAMC,IAAkBC;AAAA,IACtB,EAAE,gBAAgBF,EAAA;AAAA,IAClB,EAAE,WAAW,MAAA;AAAA,EAAS,GAGlBG,IAAgBC,EAAoB,CAACH,CAAe,CAAC,GAErDI,IAAaJ,EAAgB,MAAM;AAEzC,SAAIA,EAAgB,aAAa,CAACI,IACzB,EAAE,WAAW,IAAM,eAAAF,EAAA,IAGrB;AAAA,IACL,WAAW;AAAA,IACX,MAAM,EAAE,YAAAE,EAAA;AAAA,IACR,QAAQ;AAAA,MACN,YAAYJ,EAAgB;AAAA,MAC5B,WAAW;AAAA,IAAA;AAAA,IAEb,eAAAE;AAAA,EAAA;AAEJ;"}