@gusto/embedded-react-sdk 0.57.3 → 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 (264) hide show
  1. package/CHANGELOG.md +88 -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/UI/Table/Table.js +65 -25
  14. package/dist/components/Common/UI/Table/Table.js.map +1 -1
  15. package/dist/components/Common/UI/Table/Table.module.scss.js +8 -4
  16. package/dist/components/Common/UI/Table/Table.module.scss.js.map +1 -1
  17. package/dist/components/Common/UI/Table/TableTypes.js.map +1 -1
  18. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +3 -4
  19. package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
  20. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +3 -4
  21. package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
  22. package/dist/components/Company/AssignSignatory/useAssignSignatory.js +5 -6
  23. package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
  24. package/dist/components/Company/BankAccount/BankAccountForm/context.js +3 -4
  25. package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
  26. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +3 -4
  27. package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  28. package/dist/components/Company/FederalTaxes/useFederalTaxes.js +5 -6
  29. package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
  30. package/dist/components/Company/Industry/Context.js +6 -7
  31. package/dist/components/Company/Industry/Context.js.map +1 -1
  32. package/dist/components/Company/Locations/LocationForm/useLocationForm.js +3 -4
  33. package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
  34. package/dist/components/Company/Locations/LocationsList/useLocationsList.js +3 -4
  35. package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
  36. package/dist/components/Company/OnboardingOverview/context.js +3 -4
  37. package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
  38. package/dist/components/Company/PaySchedule/PaySchedule.js +30 -45
  39. package/dist/components/Company/PaySchedule/PaySchedule.js.map +1 -1
  40. package/dist/components/Company/PaySchedule/PayScheduleComponents.js +11 -12
  41. package/dist/components/Company/PaySchedule/PayScheduleComponents.js.map +1 -1
  42. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/fields.js.map +1 -1
  43. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.js.map +1 -1
  44. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js +78 -83
  45. package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.js.map +1 -1
  46. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +3 -4
  47. package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
  48. package/dist/components/Company/StateTaxes/StateTaxesList/context.js +3 -4
  49. package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
  50. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js +3 -4
  51. package/dist/components/Company/StateTaxes/TaxRateManagement/context.js.map +1 -1
  52. package/dist/components/Contractor/Compensation/management/CompensationEditForm.js +45 -54
  53. package/dist/components/Contractor/Compensation/management/CompensationEditForm.js.map +1 -1
  54. package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js +17 -22
  55. package/dist/components/Contractor/Compensation/shared/useContractorPayForm/contractorPaySchema.js.map +1 -1
  56. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js +1 -0
  57. package/dist/components/Contractor/ContractorList/management/ManagementContractorList.js.map +1 -1
  58. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js +122 -113
  59. package/dist/components/Contractor/ContractorList/management/ManagementContractorListView.js.map +1 -1
  60. package/dist/components/Contractor/ContractorList/shared/useContractorList.js +63 -54
  61. package/dist/components/Contractor/ContractorList/shared/useContractorList.js.map +1 -1
  62. package/dist/components/Contractor/PaymentMethod/onboarding/PaymentMethod.js +39 -48
  63. package/dist/components/Contractor/PaymentMethod/onboarding/PaymentMethod.js.map +1 -1
  64. package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js +76 -69
  65. package/dist/components/Contractor/Profile/onboarding/ContractorProfile.js.map +1 -1
  66. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js +27 -29
  67. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js.map +1 -1
  68. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js +14 -12
  69. package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js.map +1 -1
  70. package/dist/components/Contractor/shared/hourlyRate.js +14 -0
  71. package/dist/components/Contractor/shared/hourlyRate.js.map +1 -0
  72. package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js +63 -63
  73. package/dist/components/Employee/Compensation/management/CompensationCard/CompensationCard.js.map +1 -1
  74. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +3 -4
  75. package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
  76. package/dist/components/Employee/PaymentMethod/onboarding/ListView.js +65 -74
  77. package/dist/components/Employee/PaymentMethod/onboarding/ListView.js.map +1 -1
  78. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js +16 -16
  79. package/dist/components/Payroll/Dismissal/DismissalPayPeriodSelection/DismissalPayPeriodSelection.js.map +1 -1
  80. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js +2 -3
  81. package/dist/components/Payroll/GrossUpModal/GrossUpModal.js.map +1 -1
  82. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +84 -82
  83. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  84. package/dist/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.js +8 -0
  85. package/dist/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.js.map +1 -0
  86. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js +91 -88
  87. package/dist/components/Payroll/PayrollConfiguration/PayrollConfigurationPresentation.js.map +1 -1
  88. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js +16 -16
  89. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployee.js.map +1 -1
  90. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js +146 -134
  91. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  92. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.module.scss.js +14 -12
  93. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.module.scss.js.map +1 -1
  94. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js +34 -33
  95. package/dist/components/Payroll/PayrollEditEmployee/TimeOffField.js.map +1 -1
  96. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js +49 -48
  97. package/dist/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.js.map +1 -1
  98. package/dist/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.js.map +1 -1
  99. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js +0 -4
  100. package/dist/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.js.map +1 -1
  101. package/dist/components/Payroll/PayrollFlow/PayrollFlow.js.map +1 -1
  102. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js +51 -38
  103. package/dist/components/Payroll/PayrollFlow/PayrollFlowComponents.js.map +1 -1
  104. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js +121 -102
  105. package/dist/components/Payroll/PayrollFlow/payrollStateMachine.js.map +1 -1
  106. package/dist/components/Payroll/PayrollLanding/PayrollLanding.js.map +1 -1
  107. package/dist/components/Payroll/PayrollList/PayrollList.js +79 -74
  108. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  109. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js +92 -83
  110. package/dist/components/Payroll/PayrollOverview/PayrollOverview.js.map +1 -1
  111. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js +23 -27
  112. package/dist/components/Payroll/PayrollReceipts/PayrollReceiptsPresentation.js.map +1 -1
  113. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js +82 -75
  114. package/dist/components/Payroll/PrintChecks/PrintChecksForm/PrintChecksForm.js.map +1 -1
  115. package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.js +416 -0
  116. package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.js.map +1 -0
  117. package/dist/components/Payroll/{UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js → RropPayrollEditEmployee/RropPayrollEditEmployee.module.scss.js} +1 -1
  118. package/dist/components/Payroll/RropPayrollEditEmployee/RropPayrollEditEmployee.module.scss.js.map +1 -0
  119. package/dist/components/Payroll/TransitionConfiguration/TransitionConfiguration.js +97 -0
  120. package/dist/components/Payroll/TransitionConfiguration/TransitionConfiguration.js.map +1 -0
  121. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.js +106 -0
  122. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.js.map +1 -0
  123. package/dist/components/Payroll/{TransitionCreation/TransitionCreationPresentation.module.scss.js → TransitionConfiguration/TransitionConfigurationPresentation.module.scss.js} +1 -1
  124. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.module.scss.js.map +1 -0
  125. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.js +10 -0
  126. package/dist/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.js.map +1 -0
  127. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js +86 -64
  128. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlert.js.map +1 -1
  129. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js +126 -77
  130. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.js.map +1 -1
  131. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.module.scss.js +8 -0
  132. package/dist/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.module.scss.js.map +1 -0
  133. package/dist/components/Payroll/index.js +16 -20
  134. package/dist/components/Payroll/index.js.map +1 -1
  135. package/dist/components/Payroll/usePreparedPayrollData.js +2 -3
  136. package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
  137. package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js +11 -14
  138. package/dist/components/Payroll/useUnprocessedTransitionPayPeriods.js.map +1 -1
  139. package/dist/contexts/ApiProvider/ApiProvider.js +18 -17
  140. package/dist/contexts/ApiProvider/ApiProvider.js.map +1 -1
  141. package/dist/contexts/ApiProvider/payScheduleCustomNameHook.js +31 -0
  142. package/dist/contexts/ApiProvider/payScheduleCustomNameHook.js.map +1 -0
  143. package/dist/contexts/FeaturesProvider/FeaturesProvider.js +14 -0
  144. package/dist/contexts/FeaturesProvider/FeaturesProvider.js.map +1 -0
  145. package/dist/contexts/FeaturesProvider/useFeature.js +7 -0
  146. package/dist/contexts/FeaturesProvider/useFeature.js.map +1 -0
  147. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js +32 -30
  148. package/dist/contexts/GustoProvider/GustoProviderCustomUIAdapter.js.map +1 -1
  149. package/dist/contexts/UnstableFeaturesProvider/useUnstableFeature.js.map +1 -1
  150. package/dist/i18n/I18n.js +2 -3
  151. package/dist/i18n/I18n.js.map +1 -1
  152. package/dist/i18n/en/Contractor.Profile.json.js +1 -1
  153. package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js +29 -23
  154. package/dist/i18n/en/Payroll.PayrollEditEmployee.json.js.map +1 -1
  155. package/dist/i18n/en/Payroll.PayrollLanding.json.js +1 -1
  156. package/dist/i18n/en/{Payroll.UNSTABLE_PayrollEditEmployee.json.js → Payroll.RropPayrollEditEmployee.json.js} +42 -38
  157. package/dist/i18n/en/Payroll.RropPayrollEditEmployee.json.js.map +1 -0
  158. package/dist/i18n/en/Payroll.TransitionConfiguration.json.js +28 -0
  159. package/dist/i18n/en/Payroll.TransitionConfiguration.json.js.map +1 -0
  160. package/dist/i18n/en/Payroll.TransitionPayrollAlert.json.js +16 -12
  161. package/dist/i18n/en/Payroll.TransitionPayrollAlert.json.js.map +1 -1
  162. package/dist/i18n/en/common.json.js +1 -1
  163. package/dist/package.json.js +1 -1
  164. package/dist/partner-hook-utils/form/composeSubmitHandler.js +55 -48
  165. package/dist/partner-hook-utils/form/composeSubmitHandler.js.map +1 -1
  166. package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js +31 -29
  167. package/dist/partner-hook-utils/form/fields/RadioGroupHookField.js.map +1 -1
  168. package/dist/shared/constants.js +2 -1
  169. package/dist/shared/constants.js.map +1 -1
  170. package/dist/src/components/Common/DataView/DataCards/DataCards.d.ts +3 -1
  171. package/dist/src/components/Common/DataView/DataTable/DataTable.d.ts +3 -1
  172. package/dist/src/components/Common/DataView/DataView.d.ts +2 -0
  173. package/dist/src/components/Common/DataView/getSortControls.d.ts +24 -0
  174. package/dist/src/components/Common/DataView/useDataView.d.ts +22 -1
  175. package/dist/src/components/Common/UI/Table/TableTypes.d.ts +71 -2
  176. package/dist/src/components/Company/PaySchedule/PaySchedule.d.ts +1 -9
  177. package/dist/src/components/Company/PaySchedule/PayScheduleComponents.d.ts +0 -1
  178. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/fields.d.ts +1 -1
  179. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.d.ts +1 -1
  180. package/dist/src/components/Company/PaySchedule/shared/usePayScheduleForm/usePayScheduleForm.d.ts +3 -14
  181. package/dist/src/components/Contractor/ContractorList/management/ManagementContractorListView.d.ts +2 -2
  182. package/dist/src/components/Contractor/ContractorList/shared/index.d.ts +1 -1
  183. package/dist/src/components/Contractor/ContractorList/shared/useContractorList.d.ts +38 -0
  184. package/dist/src/components/Contractor/shared/hourlyRate.d.ts +23 -0
  185. package/dist/src/components/Payroll/OffCycleTaxWithholdingTable/getDefaultWithholdingPayPeriod.d.ts +9 -0
  186. package/dist/src/components/Payroll/PayrollEditEmployee/TimeOffField.d.ts +3 -1
  187. package/dist/src/components/Payroll/PayrollEditEmployee/shared/usePayrollEditEmployeeForm/fields.d.ts +2 -0
  188. package/dist/src/components/Payroll/PayrollExecutionFlow/PayrollExecutionFlow.d.ts +8 -6
  189. package/dist/src/components/Payroll/PayrollExecutionFlow/payrollExecutionMachine.d.ts +0 -8
  190. package/dist/src/components/Payroll/PayrollFlow/PayrollFlow.d.ts +5 -3
  191. package/dist/src/components/Payroll/PayrollFlow/PayrollFlowComponents.d.ts +2 -3
  192. package/dist/src/components/Payroll/PayrollFlow/payrollStateMachine.d.ts +1 -1
  193. package/dist/src/components/Payroll/PayrollLanding/PayrollLanding.d.ts +18 -5
  194. package/dist/src/components/Payroll/PayrollList/PayrollList.d.ts +11 -5
  195. package/dist/src/components/Payroll/{UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.d.ts → RropPayrollEditEmployee/RropPayrollEditEmployee.d.ts} +9 -5
  196. package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfiguration.d.ts +55 -0
  197. package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfigurationPresentation.d.ts +9 -0
  198. package/dist/src/components/Payroll/TransitionConfiguration/TransitionConfigurationTypes.d.ts +52 -0
  199. package/dist/src/components/Payroll/TransitionConfiguration/index.d.ts +2 -0
  200. package/dist/src/components/Payroll/TransitionPayrollAlert/TransitionPayrollAlertPresentation.d.ts +5 -2
  201. package/dist/src/components/Payroll/index.d.ts +2 -6
  202. package/dist/src/contexts/ApiProvider/payScheduleCustomNameHook.d.ts +14 -0
  203. package/dist/src/contexts/ApiProvider/payScheduleCustomNameHook.test.d.ts +1 -0
  204. package/dist/src/contexts/ComponentAdapter/componentAdapterTypes.d.ts +1 -1
  205. package/dist/src/contexts/FeaturesProvider/FeaturesProvider.d.ts +21 -0
  206. package/dist/src/contexts/FeaturesProvider/useFeature.d.ts +53 -0
  207. package/dist/src/contexts/GustoProvider/GustoProviderCustomUIAdapter.d.ts +3 -0
  208. package/dist/src/contexts/UnstableFeaturesProvider/useUnstableFeature.d.ts +38 -10
  209. package/dist/src/contexts/index.d.ts +1 -0
  210. package/dist/src/i18n/en/common.json.d.ts +5 -1
  211. package/dist/src/i18n/types.d.ts +113 -66
  212. package/dist/src/partner-hook-utils/form/fields/RadioGroupHookField.d.ts +9 -7
  213. package/dist/src/shared/constants.d.ts +4 -2
  214. package/dist/src/test-utils/renderWithProviders.d.ts +2 -0
  215. package/dist/style.css +1 -1
  216. package/docs/guides/endpoint-inventory.json +24 -27
  217. package/package.json +15 -14
  218. package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js +0 -29
  219. package/dist/components/Payroll/PayrollFlow/TransitionFlowContextual.js.map +0 -1
  220. package/dist/components/Payroll/Transition/TransitionFlow.js +0 -60
  221. package/dist/components/Payroll/Transition/TransitionFlow.js.map +0 -1
  222. package/dist/components/Payroll/Transition/TransitionFlowComponents.js +0 -31
  223. package/dist/components/Payroll/Transition/TransitionFlowComponents.js.map +0 -1
  224. package/dist/components/Payroll/Transition/transitionStateMachine.js +0 -49
  225. package/dist/components/Payroll/Transition/transitionStateMachine.js.map +0 -1
  226. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js +0 -100
  227. package/dist/components/Payroll/TransitionCreation/TransitionCreation.js.map +0 -1
  228. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js +0 -110
  229. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.js.map +0 -1
  230. package/dist/components/Payroll/TransitionCreation/TransitionCreationPresentation.module.scss.js.map +0 -1
  231. package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js +0 -21
  232. package/dist/components/Payroll/TransitionCreation/TransitionCreationTypes.js.map +0 -1
  233. package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js +0 -48
  234. package/dist/components/Payroll/TransitionPayroll/TransitionPayroll.js.map +0 -1
  235. package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js +0 -35
  236. package/dist/components/Payroll/TransitionPayroll/TransitionPayrollComponents.js.map +0 -1
  237. package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js +0 -23
  238. package/dist/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.js.map +0 -1
  239. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js +0 -29
  240. package/dist/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.js.map +0 -1
  241. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js +0 -411
  242. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.js.map +0 -1
  243. package/dist/components/Payroll/UNSTABLE_PayrollEditEmployee/UNSTABLE_PayrollEditEmployee.module.scss.js.map +0 -1
  244. package/dist/i18n/en/Payroll.Transition.json.js +0 -8
  245. package/dist/i18n/en/Payroll.Transition.json.js.map +0 -1
  246. package/dist/i18n/en/Payroll.TransitionCreation.json.js +0 -26
  247. package/dist/i18n/en/Payroll.TransitionCreation.json.js.map +0 -1
  248. package/dist/i18n/en/Payroll.UNSTABLE_PayrollEditEmployee.json.js.map +0 -1
  249. package/dist/src/components/Payroll/PayrollFlow/TransitionFlowContextual.d.ts +0 -7
  250. package/dist/src/components/Payroll/Transition/TransitionFlow.d.ts +0 -55
  251. package/dist/src/components/Payroll/Transition/TransitionFlowComponents.d.ts +0 -52
  252. package/dist/src/components/Payroll/Transition/index.d.ts +0 -2
  253. package/dist/src/components/Payroll/Transition/transitionStateMachine.d.ts +0 -29
  254. package/dist/src/components/Payroll/TransitionCreation/TransitionCreation.d.ts +0 -22
  255. package/dist/src/components/Payroll/TransitionCreation/TransitionCreationPresentation.d.ts +0 -9
  256. package/dist/src/components/Payroll/TransitionCreation/TransitionCreationTypes.d.ts +0 -57
  257. package/dist/src/components/Payroll/TransitionCreation/index.d.ts +0 -2
  258. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayroll.d.ts +0 -55
  259. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollComponents.d.ts +0 -24
  260. package/dist/src/components/Payroll/TransitionPayroll/TransitionPayrollTypes.d.ts +0 -23
  261. package/dist/src/components/Payroll/TransitionPayroll/index.d.ts +0 -2
  262. package/dist/src/components/Payroll/TransitionPayroll/transitionPayrollStateMachine.d.ts +0 -15
  263. package/dist/src/components/Payroll/TransitionPayroll/useResolveTransitionPayroll.d.ts +0 -28
  264. /package/dist/src/components/{Payroll/Transition/transitionStateMachine.test.d.ts → Common/DataView/getSortControls.test.d.ts} +0 -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?.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 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":";;;;;;;;;;;;;;;;;AA8MA,MAAMA,KAA4B,CAACC,MACjC,CAAC,CAACA,GAAY,oBACdC,GAAiC,IAAID,EAAW,gBAAgB,GAE5DE,KAA0B,CAACF,MAC1BA,IAEHA,EAAW,qBAAqBG,EAA2B,+BAC3DH,EAAW,qBAAqBG,EAA2B,8BAHrC;AAQ1B,SAASC,GACPC,GACA;AACA,QAAMC,IAAc,CAACC,EAAe,YAAYA,EAAe,QAAQ,GACjEC,IAAkB,CAACC,EAAS,QAAQA,EAAS,KAAK;AACxD,SAAO;AAAA,IACL,MAAMC;AAAA,MACJL,EAAK;AAAA,MACLC,EAAY,IAAI,CAAAK,OAAU,EAAE,OAAAA,GAAO,OAAOA,IAAQ;AAAA,MAClDL;AAAA,IAAA;AAAA,IAEF,UAAUI;AAAA,MACRL,EAAK;AAAA,MACLG,EAAgB,IAAI,CAAAG,OAAU,EAAE,OAAAA,GAAO,OAAOA,IAAQ;AAAA,MACtDH;AAAA,IAAA;AAAA,IAEF,WAAWH,EAAK;AAAA,IAChB,YAAYA,EAAK;AAAA,IACjB,gBAAgBA,EAAK;AAAA,IACrB,mBAAmBA,EAAK;AAAA,IACxB,OAAOA,EAAK;AAAA,IACZ,WAAWA,EAAK;AAAA,IAChB,UAAUA,EAAK;AAAA,IACf,eAAeA,EAAK;AAAA,IACpB,cAAcA,EAAK;AAAA,IACnB,KAAKA,EAAK;AAAA,IACV,KAAKA,EAAK;AAAA,IACV,WAAWK;AAAA,MACTL,EAAK;AAAA,MACLO,EAAY,IAAI,CAAAC,OAAS,EAAE,OAAOA,GAAM,OAAOA,IAAO;AAAA,MACtDD;AAAA,IAAA;AAAA,EACF;AAEJ;AAkEO,SAASE,GAAyB;AAAA,EACvC,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,yBAAAC,IAA0B;AAAA,EAC1B,gBAAAC,IAAiB;AAAA,EACjB,yBAAAC;AAAA,EACA,eAAeC;AAAA,EACf,gBAAAC,IAAiB;AAAA,EACjB,kBAAAC,IAAmB;AACrB,GAAqF;AACnF,QAAMC,IAAkBC;AAAA,IACtB,EAAE,gBAAgBR,KAAgB,GAAA;AAAA,IAClC,EAAE,SAAS,CAAC,CAACA,EAAA;AAAA,EAAa,GAGtBhB,IAAauB,EAAgB,MAAM,gBAEnCE,IAAe,CAACT,GAChBU,IAA6BxB,GAAwBF,CAAU,GAE/D2B,IAAOF,IAAe,WAAW,UACjCG,IAAS5B,GAAY,UAAU,IAC/B6B,IAAS7B,GAAY,UAAU,IAE/B,CAAC8B,GAAQC,CAAc,IAAIC;AAAA,IAC/B,MAAMC,GAA8B,EAAE,MAAAN,GAAM,yBAAAR,GAAyB,QAAAS,GAAQ,QAAAC,GAAQ;AAAA,IACrF,CAACF,GAAMR,GAAyBS,GAAQC,CAAM;AAAA,EAAA,GAG1CK,IACJlC,GAAY,cAAc,OAAO,WAAWA,EAAW,UAAU,IAAI,QAEjEmC,IAA8CH;AAAA,IAClD,OAAO;AAAA,MACL,MAAMhC,GAAY,QAAQoB,GAAiB,QAAQb,EAAe;AAAA,MAClE,UAAUP,GAAY,YAAYoB,GAAiB,YAAYX,EAAS;AAAA,MACxE,WACET,GAAY,aACZoB,GAAiB,cACjB,oBAAI,KAAA,GAAO,YAAA,EAAc,MAAM,GAAG,EAAE,CAAC;AAAA,MACvC,YAAYc,KAAoBd,GAAiB,cAAc;AAAA,MAC/D,gBAAgBA,GAAiB,kBAAkBrB,GAA0BC,CAAU;AAAA,MACvF,mBACEA,GAAY,qBAAqBoB,GAAiB,qBAAqB;AAAA,MACzE,OAAOpB,GAAY,SAASoB,GAAiB,SAAS;AAAA,MACtD,WAAWpB,GAAY,aAAaoB,GAAiB,aAAa;AAAA,MAClE,UAAUpB,GAAY,YAAYoB,GAAiB,YAAY;AAAA,MAC/D,eAAepB,GAAY,iBAAiBoB,GAAiB,iBAAiB;AAAA,MAC9E,cAAcpB,GAAY,gBAAgBoB,GAAiB,gBAAgB;AAAA,MAC3E,WAAWpB,GAAY,aAAaoB,GAAiB,aAAa;AAAA,MAClE,KAAKA,GAAiB,OAAO;AAAA,MAC7B,KAAKA,GAAiB,OAAO;AAAA,IAAA;AAAA,IAE/B,CAACpB,GAAYoB,GAAiBc,CAAgB;AAAA,EAAA,GAG1CE,IAAcC,GAA0E;AAAA,IAC5F,UAAUC,GAAYR,CAAM;AAAA,IAC5B,MAAMT;AAAA,IACN,kBAAAC;AAAA,IACA,eAAea;AAAA,IACf,QAAQA;AAAA,IACR,cAAc,EAAE,iBAAiB,GAAA;AAAA,EAAK,CACvC,GAEK,CAACI,GAAaC,GAAiBC,GAAuBC,CAAwB,IAAIC,GAAS;AAAA,IAC/F,SAASP,EAAY;AAAA,IACrB,MAAM,CAAC,QAAQ,YAAY,kBAAkB,mBAAmB;AAAA,EAAA,CACjE,GAKKQ,IAAeL,MAAgBhC,EAAe,YAC9CsC,IAAaN,MAAgBhC,EAAe,UAC5CuC,IAAWN,MAAoB/B,EAAS,QAExCsC,IAA2BC,GAAA,GAC3BC,IAA2BC,GAAA,GAE3BC,IAAYJ,EAAyB,aAAaE,EAAyB,WAE3E;AAAA,IACJ,mBAAAG;AAAA,IACA,OAAOC;AAAA,IACP,UAAUC;AAAA,EAAA,IACRC,GAAc,uBAAuB,GAGnCC,IAAgBC,GADNzC,IAAe,CAACO,CAAe,IAAI,CAAA,GACA,EAAE,aAAA8B,GAAa,gBAAAC,GAAgB,GAE5EI,IAAeC,GAAwB5B,GAAgBK,EAAY,OAAO,GAC1EwB,IAAiBxD,GAAqCsD,CAAY,GAElEG,IAAW,OACfC,OACsD;AACtD,QAAIC;AAEJ,iBAAM,IAAI,QAAc,CAAAC,MAAW;AACjC,MAAK5B,EAAY;AAAA,QACf,OAAO6B,OAAuC;AAC5C,gBAAMb,EAAkBa,IAAM,OAAMC,MAAW;AAC7C,kBAAMC,IAAwBD,EAAQ,gBAChCE,KAAaF,EAAQ,MAAMG,EAAgBH,EAAQ,GAAG,IAAI,IAC1DI,KAAaJ,EAAQ,MAAMG,EAAgBH,EAAQ,GAAG,IAAI,IAE1DK,IAA2C;AAAA,cAC/C,MAAML,EAAQ;AAAA,cACd,UAAUA,EAAQ;AAAA,cAClB,WAAWA,EAAQ;AAAA,cACnB,gBAAgBC;AAAA,cAChB,QACEjD,KAAkBiD,MAAwBD,EAAQ,SAAS;AAAA;AAAA;AAAA,cAG7D,YACEA,EAAQ,aAAazD,EAAS,UAAU,OAAO,SAASyD,EAAQ,UAAU,IACtE,OAAOA,EAAQ,UAAU,IACzB;AAAA,cACN,GAAIA,EAAQ,SAAS3D,EAAe,aAChC;AAAA,gBACE,WAAW2D,EAAQ;AAAA,gBACnB,UAAUA,EAAQ;AAAA,gBAClB,eAAeA,EAAQ,iBAAiB;AAAA,gBACxC,mBAAmBA,EAAQ;AAAA,gBAC3B,WAAWA,EAAQ,qBACfA,EAAQ,aAAa;AAAA,gBAEzB,KAAKE,MAAc;AAAA,cAAA,IAErB;AAAA,gBACE,mBAAmB;AAAA,gBACnB,cAAcF,EAAQ;AAAA,gBACtB,KAAKI,MAAc;AAAA,cAAA;AAAA,YACrB;AAGN,gBAAIE;AAEJ,gBAAI/C,GAAc;AAChB,oBAAMgD,IAAoBX,IAAS,aAAa/C;AAChD,kBAAI,CAAC0D;AACH,sBAAM,IAAIC,EAAiB,8CAA8C;AAG3E,oBAAMC,IAAS,MAAM5B,EAAyB,YAAY;AAAA,gBACxD,SAAS;AAAA,kBACP,aAAa0B;AAAA,kBACb,6BAA6B,EAAE,GAAGF,GAAa,UAAU,GAAA;AAAA,gBAAK;AAAA,cAChE,CACD;AAED,kBAAI,CAACI,EAAO;AACV,sBAAM,IAAID,EAAiB,4BAA4B;AAGzD,cAAAF,IAAkBG,EAAO;AAAA,YAC3B,OAAO;AACL,kBAAI,CAAC3E,GAAY;AACf,sBAAM,IAAI0E,EAAiB,4CAA4C;AAGzE,oBAAME,IAA0C;AAAA,gBAC9C,GAAGL;AAAA,gBACH,SAASvE,EAAW;AAAA,cAAA,GAGhB2E,IAAS,MAAM1B,EAAyB,YAAY;AAAA,gBACxD,SAAS;AAAA,kBACP,gBAAgBjD,EAAW;AAAA,kBAC3B,6BAA6B4E;AAAA,gBAAA;AAAA,cAC/B,CACD;AAED,kBAAI,CAACD,EAAO;AACV,sBAAM,IAAID,EAAiB,0BAA0B;AAGvD,cAAAF,IAAkBG,EAAO;AAAA,YAC3B;AAEA,YAAAZ,IAAe;AAAA,cACb,MAAMtC,IAAe,WAAW;AAAA,cAChC,MAAM+C;AAAA,YAAA;AAAA,UAEV,CAAC,GACDR,EAAA;AAAA,QACF;AAAA,QACA,MAAM;AACJ,UAAAA,EAAA;AAAA,QACF;AAAA,MAAA,EACF;AAAA,IACF,CAAC,GAEMD;AAAA,EACT,GAEMc,IAAoBC,GAAqB1C,CAAW;AAI1D,UAFsBpB,IAAeO,EAAgB,YAAY,OAE3CP,KAAgB,CAAChB,IAC9B,EAAE,WAAW,IAAe,eAAAwD,EAAA,IAG9B;AAAA,IACL,WAAW;AAAA,IACX,MAAM;AAAA,MACJ,YAAYxD,KAAc;AAAA,IAAA;AAAA,IAE5B,QAAQ;AAAA,MACN,WAAAmD;AAAA,MACA,MAAM1B,IAAgB,WAAsB;AAAA,IAAA;AAAA,IAE9C,SAAS,EAAE,UAAAoC,EAAA;AAAA,IACX,eAAAL;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,QACN,MAAMuB;AAAA,QACN,UAAUC;AAAA,QACV,WAAWC;AAAA,QACX,YAAYnC,IAAWoC,KAAkB;AAAA,QACzC,gBACEjE,KAA2BS,IAA6ByD,KAAsB;AAAA,QAChF,mBAAmBvC,IAAewC,KAAyB;AAAA,QAC3D,OAAOlE,KAAkBuB,IAAwB4C,KAAa;AAAA,QAC9D,WAAWzC,IAAe0C,KAAiB;AAAA,QAC3C,UAAU1C,IAAe2C,KAAgB;AAAA,QACzC,eAAe3C,IAAe4C,KAAqB;AAAA,QACnD,cAAc3C,IAAa4C,KAAoB;AAAA,QAC/C,KAAK7C,IAAe8C,KAAW;AAAA,QAC/B,KAAK7C,IAAa8C,KAAW;AAAA,QAC7B,WAAW/C,KAAgBF,IAA2BkD,KAAiB;AAAA,MAAA;AAAA,MAEzE,gBAAAhC;AAAA,MACA,mBAAAiB;AAAA,MACA,yBAAyBgB,GAA8BzD,GAAaN,CAAM;AAAA,IAAA;AAAA,EAC5E;AAEJ;"}
@@ -0,0 +1,14 @@
1
+ import { z as r } from "zod";
2
+ import { coerceNaN as o } from "../../../partner-hook-utils/form/preprocessors.js";
3
+ const t = 1e12;
4
+ function c(e) {
5
+ return r.preprocess(
6
+ o(0),
7
+ r.number().min(0).max(t, { message: e })
8
+ );
9
+ }
10
+ export {
11
+ t as HOURLY_RATE_CAP,
12
+ c as createHourlyRateValidator
13
+ };
14
+ //# sourceMappingURL=hourlyRate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hourlyRate.js","sources":["../../../../src/components/Contractor/shared/hourlyRate.ts"],"sourcesContent":["import { z } from 'zod'\nimport { coerceNaN } from '@/partner-hook-utils/form/preprocessors'\n\n/**\n * Largest hourly rate the contractor create/update API accepts. Mirrored client-side so an\n * over-limit value is caught inline instead of round-tripping to an API error.\n *\n * @internal\n */\nexport const HOURLY_RATE_CAP = 1_000_000_000_000\n\n/**\n * Builds the `hourlyRate` validator shared by the contractor pay and contractor details forms.\n *\n * @remarks\n * Only bounded to non-negative, so a Fixed contractor's default of 0 stays valid while the field\n * doesn't apply to them. Each schema decides separately when an Hourly contractor must supply a\n * rate — `superRefine` in `contractorPaySchema`, `requiredFieldsConfig` + `excludeFields` in\n * `contractorDetailsSchema`.\n *\n * @param maxErrorCode - The calling schema's own \"rate too large\" error code, so validation types\n * stay derived from that schema's error-codes constant.\n * @returns A `z.preprocess` validator producing a number between 0 and {@link HOURLY_RATE_CAP}.\n * @internal\n */\nexport function createHourlyRateValidator(maxErrorCode: string) {\n return z.preprocess(\n coerceNaN(0),\n z.number().min(0).max(HOURLY_RATE_CAP, { message: maxErrorCode }),\n )\n}\n"],"names":["HOURLY_RATE_CAP","createHourlyRateValidator","maxErrorCode","z","coerceNaN"],"mappings":";;AASO,MAAMA,IAAkB;AAgBxB,SAASC,EAA0BC,GAAsB;AAC9D,SAAOC,EAAE;AAAA,IACPC,EAAU,CAAC;AAAA,IACXD,EAAE,SAAS,IAAI,CAAC,EAAE,IAAIH,GAAiB,EAAE,SAASE,EAAA,CAAc;AAAA,EAAA;AAEpE;"}
@@ -5,14 +5,14 @@ import { useJobsAndCompensationsDeleteMutation as pe } from "@gusto/embedded-api
5
5
  import { usePendingChangeDetailRenderer as ge } from "../../shared/usePendingChangeDetailRenderer.js";
6
6
  import { PendingChangesReviewModal as fe } from "../../shared/PendingChangesReviewModal.js";
7
7
  import k from "./CompensationCard.module.scss.js";
8
- import { Flex as P } from "../../../../Common/Flex/Flex.js";
9
- import { useComponentContext as Y } from "../../../../../contexts/ComponentAdapter/useComponentContext.js";
8
+ import { Flex as T } from "../../../../Common/Flex/Flex.js";
9
+ import { useComponentContext as G } from "../../../../../contexts/ComponentAdapter/useComponentContext.js";
10
10
  import { Loading as Ce } from "../../../../Common/Loading/Loading.js";
11
11
  import { EmptyData as he } from "../../../../Common/EmptyData/EmptyData.js";
12
12
  import { HamburgerMenu as be } from "../../../../Common/HamburgerMenu/HamburgerMenu.js";
13
- import { BaseBoundaries as Ee, BaseLayout as G } from "../../../../Base/Base.js";
14
- import { formatDateToStringDate as ye, formatDateLongWithYear as b } from "../../../../../helpers/dateFormatting.js";
15
- import { useFormatCompensationRate as De } from "../../../../../helpers/formattedStrings.js";
13
+ import { BaseBoundaries as Ee, BaseLayout as V } from "../../../../Base/Base.js";
14
+ import { formatDateToStringDate as De, formatDateLongWithYear as E } from "../../../../../helpers/dateFormatting.js";
15
+ import { useFormatCompensationRate as ye } from "../../../../../helpers/formattedStrings.js";
16
16
  import { useI18n as Ae } from "../../../../../i18n/I18n.js";
17
17
  import { componentEvents as C, FlsaStatus as H } from "../../../../../shared/constants.js";
18
18
  import I from "../../../../../assets/icons/plus-circle.svg.js";
@@ -21,84 +21,84 @@ import Je from "../../../../../assets/icons/pencil.svg.js";
21
21
  import { useCompensationManagement as Pe } from "../../shared/useCompensationManagement/useCompensationManagement.js";
22
22
  import { VisuallyHidden as Te } from "../../../../Common/VisuallyHidden/VisuallyHidden.js";
23
23
  import { useDataView as Me } from "../../../../Common/DataView/useDataView.js";
24
- import { DataView as ve } from "../../../../Common/DataView/DataView.js";
25
- function F(o) {
26
- if (o === void 0) return null;
27
- const r = parseFloat(o);
24
+ import { DataView as Se } from "../../../../Common/DataView/DataView.js";
25
+ function F(a) {
26
+ if (a === void 0) return null;
27
+ const r = parseFloat(a);
28
28
  return Number.isFinite(r) ? r : null;
29
29
  }
30
- function nt({ LoaderComponent: o, ...r }) {
30
+ function nt({ LoaderComponent: a, ...r }) {
31
31
  return /* @__PURE__ */ n(
32
32
  Ee,
33
33
  {
34
34
  componentName: "Employee.Management.Compensation",
35
- LoaderComponent: o,
36
- children: /* @__PURE__ */ n(Se, { LoaderComponent: o, ...r })
35
+ LoaderComponent: a,
36
+ children: /* @__PURE__ */ n(ve, { LoaderComponent: a, ...r })
37
37
  }
38
38
  );
39
39
  }
40
- function Se({ employeeId: o, onEvent: r, LoaderComponent: c }) {
40
+ function ve({ employeeId: a, onEvent: r, LoaderComponent: c }) {
41
41
  Ae("Employee.Management.Compensation");
42
- const { t: E } = j("Employee.Management.Compensation"), t = Y(), i = Pe({ employeeId: o });
43
- return i.isLoading ? /* @__PURE__ */ n(G, { error: i.errorHandling.errors, LoaderComponent: c, children: /* @__PURE__ */ n(t.Box, { header: /* @__PURE__ */ n(t.BoxHeader, { title: E("card.title") }), children: /* @__PURE__ */ n(Ce, {}) }) }) : /* @__PURE__ */ n(
44
- Ue,
42
+ const { t: D } = j("Employee.Management.Compensation"), t = G(), i = Pe({ employeeId: a });
43
+ return i.isLoading ? /* @__PURE__ */ n(V, { error: i.errorHandling.errors, LoaderComponent: c, children: /* @__PURE__ */ n(t.Box, { header: /* @__PURE__ */ n(t.BoxHeader, { title: D("card.title") }), children: /* @__PURE__ */ n(Ce, {}) }) }) : /* @__PURE__ */ n(
44
+ we,
45
45
  {
46
- employeeId: o,
46
+ employeeId: a,
47
47
  onEvent: r,
48
48
  compensation: i,
49
49
  LoaderComponent: c
50
50
  }
51
51
  );
52
52
  }
53
- function Ue({
54
- employeeId: o,
53
+ function we({
54
+ employeeId: a,
55
55
  onEvent: r,
56
56
  compensation: c,
57
- LoaderComponent: E
57
+ LoaderComponent: D
58
58
  }) {
59
- const { t } = j("Employee.Management.Compensation"), i = Y(), T = De(), { jobs: p, primaryFlsaStatus: V, pendingChanges: M, hasMultipleJobs: m, employeeFirstName: y } = c.data, { cancellingCompensationUuid: v } = c.status, S = ue(
59
+ const { t } = j("Employee.Management.Compensation"), i = G(), M = ye(), { jobs: p, primaryFlsaStatus: Y, pendingChanges: S, hasMultipleJobs: m, employeeFirstName: y } = c.data, { cancellingCompensationUuid: v } = c.status, w = ue(
60
60
  async (e) => {
61
61
  await c.actions.cancelPendingChange(e) && r(C.EMPLOYEE_MANAGEMENT_COMPENSATION_CARD_CHANGE_CANCELLED, {
62
- employeeId: o,
62
+ employeeId: a,
63
63
  compensationId: e.compensationUuid
64
64
  });
65
65
  },
66
- [c, r, o]
67
- ), [g, D] = x(null), { mutateAsync: W, isPending: U } = pe(), Q = async () => {
66
+ [c, r, a]
67
+ ), [g, A] = x(null), { mutateAsync: W, isPending: _ } = pe(), Q = async () => {
68
68
  if (!g) return;
69
69
  const e = g.uuid;
70
70
  await W({ request: { jobId: e } }), r(C.EMPLOYEE_MANAGEMENT_COMPENSATION_CARD_JOB_DELETED, {
71
- employeeId: o,
71
+ employeeId: a,
72
72
  jobId: e
73
- }), D(null);
74
- }, a = p.length === 1 ? p[0] : void 0, z = ye(/* @__PURE__ */ new Date()) ?? "", X = p.find((e) => e.primary)?.compensations?.some(
73
+ }), A(null);
74
+ }, o = p.length === 1 ? p[0] : void 0, z = De(/* @__PURE__ */ new Date()) ?? "", X = p.find((e) => e.primary)?.compensations?.some(
75
75
  (e) => e.effectiveDate !== void 0 && e.effectiveDate > z && e.flsaStatus !== H.NONEXEMPT
76
- ) ?? !1, q = p.length >= 1 && V === H.NONEXEMPT && !X, w = a ? F(a.rate) : null, _ = a?.compensations?.find(
77
- (e) => e.uuid === a.currentCompensationUuid
78
- ), h = /* @__PURE__ */ n("span", { "aria-label": t("card.listEmptyPlaceholder"), children: "–" }), $ = a?.paymentUnit ? a.paymentUnit === "Hour" ? t("card.types.hourly") : a.paymentUnit === "Salary" || a.paymentUnit === "Year" ? t("card.types.salary") : a.paymentUnit : null, [K, A] = x(!1), Z = ge(y), ee = M.filter((e) => e.isNewJob), d = M.filter((e) => !e.isNewJob);
76
+ ) ?? !1, $ = p.length >= 1 && Y === H.NONEXEMPT && !X, L = o ? F(o.rate) : null, h = o?.compensations?.find(
77
+ (e) => e.uuid === o.currentCompensationUuid
78
+ ), b = /* @__PURE__ */ n("span", { "aria-label": t("card.listEmptyPlaceholder"), children: "–" }), q = h?.flsaStatus ? t(`flsaStatusLabels.${h.flsaStatus}`) : null, [K, N] = x(!1), Z = ge(y), ee = S.filter((e) => e.isNewJob), d = S.filter((e) => !e.isNewJob);
79
79
  me(() => {
80
- d.length === 0 && A(!1);
80
+ d.length === 0 && N(!1);
81
81
  }, [d.length]);
82
- const N = new Set(ee.map((e) => e.jobUuid)), te = a ? N.has(a.uuid) : !1, ne = N.size > 0, L = new Set(d.map((e) => e.jobUuid)), ie = a ? L.has(a.uuid) : !1, O = d.length > 0, R = m && d.length > 1, ae = O && !R, u = d[0], B = (e) => {
82
+ const J = new Set(ee.map((e) => e.jobUuid)), te = o ? J.has(o.uuid) : !1, ne = J.size > 0, U = new Set(d.map((e) => e.jobUuid)), ie = o ? U.has(o.uuid) : !1, O = d.length > 0, R = m && d.length > 1, ae = O && !R, u = d[0], B = (e) => {
83
83
  r(C.EMPLOYEE_MANAGEMENT_COMPENSATION_CARD_EDIT_REQUESTED, {
84
- employeeId: o,
84
+ employeeId: a,
85
85
  jobId: e.uuid
86
86
  });
87
87
  }, oe = () => {
88
- r(C.EMPLOYEE_MANAGEMENT_COMPENSATION_CARD_ADD_REQUESTED, { employeeId: o });
88
+ r(C.EMPLOYEE_MANAGEMENT_COMPENSATION_CARD_ADD_REQUESTED, { employeeId: a });
89
89
  }, re = () => {
90
90
  r(C.EMPLOYEE_MANAGEMENT_COMPENSATION_CARD_ADD_ANOTHER_REQUESTED, {
91
- employeeId: o
91
+ employeeId: a
92
92
  });
93
93
  }, se = [
94
94
  {
95
95
  key: "jobTitle",
96
96
  title: t("card.columns.jobTitle"),
97
97
  render: (e) => {
98
- const s = e.compensations?.find((J) => J.uuid === e.currentCompensationUuid), l = F(e.rate);
98
+ const s = e.compensations?.find((P) => P.uuid === e.currentCompensationUuid), l = F(e.rate);
99
99
  return /* @__PURE__ */ f(de, { children: [
100
100
  s?.title || "-",
101
- l !== null && e.paymentUnit ? /* @__PURE__ */ n(i.Text, { variant: "supporting", size: "sm", children: T(l, e.paymentUnit) }) : null
101
+ l !== null && e.paymentUnit ? /* @__PURE__ */ n(i.Text, { variant: "supporting", size: "sm", children: M(l, e.paymentUnit) }) : null
102
102
  ] });
103
103
  }
104
104
  },
@@ -117,14 +117,14 @@ function Ue({
117
117
  title: t("card.columns.effectiveDate"),
118
118
  render: (e) => {
119
119
  const s = e.compensations?.find((l) => l.uuid === e.currentCompensationUuid);
120
- return s?.effectiveDate ? b(s.effectiveDate) : "-";
120
+ return s?.effectiveDate ? E(s.effectiveDate) : "-";
121
121
  }
122
122
  },
123
123
  ...ne ? [
124
124
  {
125
125
  key: "status",
126
126
  title: /* @__PURE__ */ n(Te, { children: t("card.columns.status") }),
127
- render: (e) => N.has(e.uuid) ? /* @__PURE__ */ n(i.Badge, { status: "warning", children: t("card.pendingStatus") }) : null
127
+ render: (e) => J.has(e.uuid) ? /* @__PURE__ */ n(i.Badge, { status: "warning", children: t("card.pendingStatus") }) : null
128
128
  }
129
129
  ] : []
130
130
  ], le = Me({
@@ -132,7 +132,7 @@ function Ue({
132
132
  columns: se,
133
133
  itemMenu: (e) => {
134
134
  const l = [
135
- ...L.has(e.uuid) ? [] : [
135
+ ...U.has(e.uuid) ? [] : [
136
136
  {
137
137
  label: t("card.editJobCta"),
138
138
  icon: /* @__PURE__ */ n(Je, { "aria-hidden": !0 }),
@@ -146,10 +146,10 @@ function Ue({
146
146
  label: t("card.deleteJobCta"),
147
147
  icon: /* @__PURE__ */ n(Ne, { "aria-hidden": !0 }),
148
148
  onClick: () => {
149
- const J = e.compensations?.find(
149
+ const P = e.compensations?.find(
150
150
  (ce) => ce.uuid === e.currentCompensationUuid
151
151
  );
152
- D({ uuid: e.uuid, title: J?.title ?? "" });
152
+ A({ uuid: e.uuid, title: P?.title ?? "" });
153
153
  }
154
154
  }
155
155
  ]
@@ -158,13 +158,13 @@ function Ue({
158
158
  be,
159
159
  {
160
160
  triggerLabel: t("card.hamburgerTitle"),
161
- isLoading: U,
161
+ isLoading: _,
162
162
  items: l
163
163
  }
164
164
  );
165
165
  }
166
166
  });
167
- return /* @__PURE__ */ f(G, { error: c.errorHandling.errors, LoaderComponent: E, children: [
167
+ return /* @__PURE__ */ f(V, { error: c.errorHandling.errors, LoaderComponent: D, children: [
168
168
  /* @__PURE__ */ n(
169
169
  i.Box,
170
170
  {
@@ -173,12 +173,12 @@ function Ue({
173
173
  i.BoxHeader,
174
174
  {
175
175
  title: t("card.title"),
176
- action: m ? null : a ? ie ? null : /* @__PURE__ */ n(
176
+ action: m ? null : o ? ie ? null : /* @__PURE__ */ n(
177
177
  i.Button,
178
178
  {
179
179
  variant: "secondary",
180
180
  onClick: () => {
181
- B(a);
181
+ B(o);
182
182
  },
183
183
  children: t("card.editCta")
184
184
  }
@@ -193,7 +193,7 @@ function Ue({
193
193
  )
194
194
  }
195
195
  ),
196
- footer: q ? /* @__PURE__ */ n(
196
+ footer: $ ? /* @__PURE__ */ n(
197
197
  i.Button,
198
198
  {
199
199
  variant: "secondary",
@@ -202,12 +202,12 @@ function Ue({
202
202
  children: t("card.addAnotherJobCta")
203
203
  }
204
204
  ) : void 0,
205
- children: /* @__PURE__ */ f(P, { flexDirection: "column", gap: 16, children: [
205
+ children: /* @__PURE__ */ f(T, { flexDirection: "column", gap: 16, children: [
206
206
  O && /* @__PURE__ */ n(
207
207
  "div",
208
208
  {
209
209
  className: [k.alertWrapper, m && k.alertWrapperPadded].filter(Boolean).join(" "),
210
- children: /* @__PURE__ */ f(P, { flexDirection: "column", gap: 16, children: [
210
+ children: /* @__PURE__ */ f(T, { flexDirection: "column", gap: 16, children: [
211
211
  ae && u && /* @__PURE__ */ n(
212
212
  i.Alert,
213
213
  {
@@ -215,11 +215,11 @@ function Ue({
215
215
  disableScrollIntoView: !0,
216
216
  label: m ? t("card.pendingChange.alertLabelWithJob", {
217
217
  jobTitle: u.jobTitle,
218
- date: b(u.effectiveDate)
218
+ date: E(u.effectiveDate)
219
219
  }) : t("card.pendingChange.alertLabel", {
220
- date: b(u.effectiveDate)
220
+ date: E(u.effectiveDate)
221
221
  }),
222
- children: /* @__PURE__ */ f(P, { flexDirection: "column", gap: 12, children: [
222
+ children: /* @__PURE__ */ f(T, { flexDirection: "column", gap: 12, children: [
223
223
  /* @__PURE__ */ n(
224
224
  i.UnorderedList,
225
225
  {
@@ -232,7 +232,7 @@ function Ue({
232
232
  variant: "secondary",
233
233
  isLoading: v === u.compensationUuid,
234
234
  onClick: () => {
235
- S(u);
235
+ w(u);
236
236
  },
237
237
  children: t("card.pendingChange.cancelCta")
238
238
  }
@@ -253,7 +253,7 @@ function Ue({
253
253
  {
254
254
  variant: "secondary",
255
255
  onClick: () => {
256
- A(!0);
256
+ N(!0);
257
257
  },
258
258
  children: t("card.pendingChange.reviewCta")
259
259
  }
@@ -263,25 +263,25 @@ function Ue({
263
263
  ] })
264
264
  }
265
265
  ),
266
- m ? /* @__PURE__ */ n(ve, { label: t("card.tableLabel"), isWithinBox: !0, ...le }) : a ? /* @__PURE__ */ n(
266
+ m ? /* @__PURE__ */ n(Se, { label: t("card.tableLabel"), isWithinBox: !0, ...le }) : o ? /* @__PURE__ */ n(
267
267
  i.DescriptionList,
268
268
  {
269
269
  items: [
270
270
  {
271
271
  term: t("card.jobTitle"),
272
- description: a.title || h
272
+ description: o.title || b
273
273
  },
274
274
  {
275
275
  term: t("card.type"),
276
- description: $ || h
276
+ description: q || b
277
277
  },
278
278
  {
279
279
  term: t("card.wage"),
280
- description: w !== null && a.paymentUnit ? T(w, a.paymentUnit) : h
280
+ description: L !== null && o.paymentUnit ? M(L, o.paymentUnit) : b
281
281
  },
282
282
  {
283
283
  term: t("card.effectiveDate"),
284
- description: _?.effectiveDate ? b(_.effectiveDate) : h
284
+ description: h?.effectiveDate ? E(h.effectiveDate) : b
285
285
  },
286
286
  ...te ? [
287
287
  {
@@ -309,10 +309,10 @@ function Ue({
309
309
  employeeFirstName: y,
310
310
  cancellingCompensationUuid: v,
311
311
  onClose: () => {
312
- A(!1);
312
+ N(!1);
313
313
  },
314
314
  onCancelChange: (e) => {
315
- S(e);
315
+ w(e);
316
316
  }
317
317
  }
318
318
  ),
@@ -321,12 +321,12 @@ function Ue({
321
321
  {
322
322
  isOpen: g !== null,
323
323
  onClose: () => {
324
- D(null);
324
+ A(null);
325
325
  },
326
326
  onPrimaryActionClick: () => {
327
327
  Q();
328
328
  },
329
- isPrimaryActionLoading: U,
329
+ isPrimaryActionLoading: _,
330
330
  isDestructive: !0,
331
331
  title: t("card.deleteJobDialog.title"),
332
332
  primaryActionLabel: t("card.deleteJobDialog.confirmCta"),