@gusto/embedded-react-sdk 0.49.0 → 0.50.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.
- package/CHANGELOG.md +26 -0
- package/dist/components/Base/createCompoundContext.d.ts +1 -1
- package/dist/components/Base/createCompoundContext.js.map +1 -1
- package/dist/components/Common/UI/Breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/components/Common/UI/CalendarPreview/CalendarLegend.d.ts +1 -1
- package/dist/components/Common/UI/CalendarPreview/CalendarLegend.js.map +1 -1
- package/dist/components/Common/UI/FileInput/FileInput.js +1 -1
- package/dist/components/Common/UI/ProgressBar/ProgressBar.js +4 -4
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js +5 -3
- package/dist/components/Company/AssignSignatory/CreateSignatory/useCreateSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js +5 -3
- package/dist/components/Company/AssignSignatory/InviteSignatory/useInviteSignatory.js.map +1 -1
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js +7 -5
- package/dist/components/Company/AssignSignatory/useAssignSignatory.js.map +1 -1
- package/dist/components/Company/BankAccount/BankAccountForm/context.js +5 -3
- package/dist/components/Company/BankAccount/BankAccountForm/context.js.map +1 -1
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js +5 -3
- package/dist/components/Company/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/signCompanyFormSchema.d.ts +1 -0
- package/dist/components/Company/DocumentSigner/shared/useSignCompanyForm/signCompanyFormSchema.js.map +1 -1
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js +10 -8
- package/dist/components/Company/FederalTaxes/useFederalTaxes.js.map +1 -1
- package/dist/components/Company/Industry/Context.js +8 -6
- package/dist/components/Company/Industry/Context.js.map +1 -1
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js +5 -3
- package/dist/components/Company/Locations/LocationForm/useLocationForm.js.map +1 -1
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js +5 -3
- package/dist/components/Company/Locations/LocationsList/useLocationsList.js.map +1 -1
- package/dist/components/Company/OnboardingFlow/OnboardingFlow.d.ts +1 -1
- package/dist/components/Company/OnboardingFlow/OnboardingFlow.js.map +1 -1
- package/dist/components/Company/OnboardingOverview/context.js +5 -3
- package/dist/components/Company/OnboardingOverview/context.js.map +1 -1
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.d.ts +1 -0
- package/dist/components/Company/PaySchedule/shared/usePayScheduleForm/payScheduleSchema.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js +5 -3
- package/dist/components/Company/StateTaxes/StateTaxesForm/context.js.map +1 -1
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js +5 -3
- package/dist/components/Company/StateTaxes/StateTaxesList/context.js.map +1 -1
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/contractorAddressSchema.d.ts +1 -0
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/contractorAddressSchema.js.map +1 -1
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.d.ts +38 -0
- package/dist/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.js.map +1 -1
- package/dist/components/Contractor/Documents/DocumentsList/useContractorDocumentsList/useContractorDocumentsList.d.ts +1 -0
- package/dist/components/Contractor/Documents/DocumentsList/useContractorDocumentsList/useContractorDocumentsList.js.map +1 -1
- package/dist/components/Contractor/OnboardingFlow/OnboardingFlow.d.ts +3 -3
- package/dist/components/Contractor/OnboardingFlow/OnboardingFlow.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/PaymentMethod.d.ts +5 -5
- package/dist/components/Contractor/PaymentMethod/PaymentMethod.js +105 -108
- package/dist/components/Contractor/PaymentMethod/PaymentMethod.js.map +1 -1
- package/dist/components/Contractor/PaymentMethod/PaymentMethod.module.scss.js +8 -0
- package/dist/components/Contractor/PaymentMethod/PaymentMethod.module.scss.js.map +1 -0
- package/dist/components/Contractor/PaymentMethod/shared/index.d.ts +2 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/fields.d.ts +93 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/fields.js +22 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/fields.js.map +1 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/index.d.ts +5 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountForm.d.ts +127 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountForm.js +109 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountForm.js.map +1 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountFormSchema.d.ts +83 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountFormSchema.js +42 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorBankAccountForm/useContractorBankAccountFormSchema.js.map +1 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/contractorPaymentMethodSchema.d.ts +58 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/contractorPaymentMethodSchema.js +21 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/contractorPaymentMethodSchema.js.map +1 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/fields.d.ts +20 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/fields.js +9 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/fields.js.map +1 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/index.d.ts +5 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.d.ts +117 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.js +91 -0
- package/dist/components/Contractor/PaymentMethod/shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.js.map +1 -0
- package/dist/components/Contractor/PaymentMethod/types.d.ts +0 -5
- package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlow.d.ts +2 -2
- package/dist/components/Contractor/Payments/PaymentFlow/PaymentFlow.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.d.ts +1 -0
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/contractorDetailsSchema.js.map +1 -1
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.d.ts +45 -0
- package/dist/components/Contractor/Profile/shared/useContractorDetailsForm/useContractorDetailsForm.js.map +1 -1
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.d.ts +1 -0
- package/dist/components/Employee/Compensation/shared/useCompensationForm/compensationSchema.js.map +1 -1
- package/dist/components/Employee/Dashboard/DashboardFlow.d.ts +1 -1
- package/dist/components/Employee/Dashboard/DashboardFlow.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.d.ts +1 -0
- package/dist/components/Employee/Deductions/shared/useChildSupportGarnishmentForm/childSupportGarnishmentFormSchema.js.map +1 -1
- package/dist/components/Employee/Deductions/shared/useDeductionForm/deductionFormSchema.d.ts +1 -0
- package/dist/components/Employee/Deductions/shared/useDeductionForm/deductionFormSchema.js.map +1 -1
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js +5 -3
- package/dist/components/Employee/Documents/onboarding/DocumentSigner/DocumentList/useDocumentList.js.map +1 -1
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/signEmployeeFormSchema.d.ts +1 -0
- package/dist/components/Employee/Documents/shared/useSignEmployeeForm/signEmployeeFormSchema.js.map +1 -1
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.d.ts +2 -2
- package/dist/components/Employee/EmployeeListFlow/EmployeeListFlow.js.map +1 -1
- package/dist/components/Employee/FederalTaxes/shared/FederalTaxesView.js +1 -1
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.d.ts +1 -0
- package/dist/components/Employee/FederalTaxes/shared/useFederalTaxesForm/federalTaxesSchema.js.map +1 -1
- package/dist/components/Employee/OnboardingExecutionFlow/OnboardingExecutionFlow.d.ts +2 -2
- package/dist/components/Employee/OnboardingExecutionFlow/OnboardingExecutionFlow.js.map +1 -1
- package/dist/components/Employee/OnboardingFlow/OnboardingFlow.d.ts +3 -3
- package/dist/components/Employee/OnboardingFlow/OnboardingFlow.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankForm.d.ts +4 -4
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankForm.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankFormSchema.d.ts +1 -0
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankFormSchema.js +7 -6
- package/dist/components/Employee/PaymentMethod/shared/useBankForm/useBankFormSchema.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodForm/usePaymentMethodForm.d.ts +1 -1
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodForm/usePaymentMethodForm.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodForm/usePaymentMethodFormSchema.d.ts +1 -0
- package/dist/components/Employee/PaymentMethod/shared/usePaymentMethodForm/usePaymentMethodFormSchema.js.map +1 -1
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/useSplitPaymentsForm.d.ts +2 -2
- package/dist/components/Employee/PaymentMethod/shared/useSplitPaymentsForm/useSplitPaymentsForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.d.ts +1 -0
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/employeeDetailsSchema.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/useEmployeeDetailsForm.d.ts +11 -12
- package/dist/components/Employee/Profile/shared/useEmployeeDetailsForm/useEmployeeDetailsForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.d.ts +1 -0
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/homeAddressSchema.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.d.ts +36 -0
- package/dist/components/Employee/Profile/shared/useHomeAddressForm/useHomeAddressForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.d.ts +31 -0
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/useWorkAddressForm.js.map +1 -1
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/workAddressSchema.d.ts +1 -0
- package/dist/components/Employee/Profile/shared/useWorkAddressForm/workAddressSchema.js.map +1 -1
- package/dist/components/Employee/SelfOnboardingFlow/SelfOnboardingFlow.d.ts +2 -2
- package/dist/components/Employee/SelfOnboardingFlow/SelfOnboardingFlow.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fieldProps.d.ts +36 -18
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fields.d.ts +113 -13
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/fields.js.map +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/index.d.ts +1 -1
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/useEmployeeStateTaxesForm.d.ts +2 -7
- package/dist/components/Employee/StateTaxes/shared/useEmployeeStateTaxesForm/useEmployeeStateTaxesForm.js.map +1 -1
- package/dist/components/Flow/Flow.js +1 -1
- package/dist/components/InformationRequests/InformationRequests.d.ts +3 -3
- package/dist/components/InformationRequests/InformationRequests.js.map +1 -1
- package/dist/components/Payroll/usePreparedPayrollData.js +10 -8
- package/dist/components/Payroll/usePreparedPayrollData.js.map +1 -1
- package/dist/helpers/validations.d.ts +12 -0
- package/dist/helpers/validations.js +6 -4
- package/dist/helpers/validations.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.js +247 -237
- package/dist/index.js.map +1 -1
- package/dist/models/external.d.ts +6 -0
- package/dist/style.css +1 -1
- package/dist/types/sdkError.js +13 -6
- package/dist/types/sdkError.js.map +1 -1
- package/package.json +7 -7
- package/dist/components/Contractor/PaymentMethod/BankAccountForm.d.ts +0 -3
- package/dist/components/Contractor/PaymentMethod/BankAccountForm.js +0 -56
- package/dist/components/Contractor/PaymentMethod/BankAccountForm.js.map +0 -1
- package/dist/components/Contractor/PaymentMethod/PaymentTypeForm.d.ts +0 -2
- package/dist/components/Contractor/PaymentMethod/PaymentTypeForm.js +0 -33
- package/dist/components/Contractor/PaymentMethod/PaymentTypeForm.js.map +0 -1
- /package/docs/{appendix → guides}/endpoint-inventory.json +0 -0
|
@@ -9,12 +9,14 @@ import "@gusto/embedded-api-v-2025-11-15/models/errors/gustoembeddederror";
|
|
|
9
9
|
import "@gusto/embedded-api-v-2025-11-15/models/errors/sdkvalidationerror";
|
|
10
10
|
import "@gusto/embedded-api-v-2025-11-15/models/errors/unprocessableentityerror";
|
|
11
11
|
import "@gusto/embedded-api-v-2025-11-15/models/errors/httpclienterrors";
|
|
12
|
+
import "dompurify";
|
|
13
|
+
import "../../../../contexts/LocaleProvider/useLocale.js";
|
|
12
14
|
import "../../../../shared/constants.js";
|
|
13
15
|
import "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
14
16
|
import { createCompoundContext as t } from "../../../Base/createCompoundContext.js";
|
|
15
|
-
const [
|
|
17
|
+
const [u, f] = t("StateTaxesFormContext");
|
|
16
18
|
export {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
f as StateTaxesFormProvider,
|
|
20
|
+
u as useStateTaxesForm
|
|
19
21
|
};
|
|
20
22
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sources":["../../../../../src/components/Company/StateTaxes/StateTaxesForm/context.ts"],"sourcesContent":["import type { TaxRequirementsState } from '@gusto/embedded-api-v-2025-11-15/models/components/taxrequirementsstate'\nimport { createCompoundContext } from '@/components/Base'\n\ninterface StateTaxFormContext {\n isPending: boolean\n state: string\n stateTaxRequirements: TaxRequirementsState\n handleCancel: () => void\n}\n\nconst [useStateTaxesForm, StateTaxesFormProvider] =\n createCompoundContext<StateTaxFormContext>('StateTaxesFormContext')\n\nexport { useStateTaxesForm, StateTaxesFormProvider }\n"],"names":["useStateTaxesForm","StateTaxesFormProvider","createCompoundContext"],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sources":["../../../../../src/components/Company/StateTaxes/StateTaxesForm/context.ts"],"sourcesContent":["import type { TaxRequirementsState } from '@gusto/embedded-api-v-2025-11-15/models/components/taxrequirementsstate'\nimport { createCompoundContext } from '@/components/Base'\n\ninterface StateTaxFormContext {\n isPending: boolean\n state: string\n stateTaxRequirements: TaxRequirementsState\n handleCancel: () => void\n}\n\nconst [useStateTaxesForm, StateTaxesFormProvider] =\n createCompoundContext<StateTaxFormContext>('StateTaxesFormContext')\n\nexport { useStateTaxesForm, StateTaxesFormProvider }\n"],"names":["useStateTaxesForm","StateTaxesFormProvider","createCompoundContext"],"mappings":";;;;;;;;;;;;;;;;AAUA,MAAM,CAACA,GAAmBC,CAAsB,IAC9CC,EAA2C,uBAAuB;"}
|
|
@@ -9,12 +9,14 @@ import "@gusto/embedded-api-v-2025-11-15/models/errors/gustoembeddederror";
|
|
|
9
9
|
import "@gusto/embedded-api-v-2025-11-15/models/errors/sdkvalidationerror";
|
|
10
10
|
import "@gusto/embedded-api-v-2025-11-15/models/errors/unprocessableentityerror";
|
|
11
11
|
import "@gusto/embedded-api-v-2025-11-15/models/errors/httpclienterrors";
|
|
12
|
+
import "dompurify";
|
|
13
|
+
import "../../../../contexts/LocaleProvider/useLocale.js";
|
|
12
14
|
import "../../../../shared/constants.js";
|
|
13
15
|
import "../../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
14
16
|
import { createCompoundContext as t } from "../../../Base/createCompoundContext.js";
|
|
15
|
-
const [
|
|
17
|
+
const [u, f] = t("StateTaxesListContext");
|
|
16
18
|
export {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
f as StateTaxesListProvider,
|
|
20
|
+
u as useStateTaxesList
|
|
19
21
|
};
|
|
20
22
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sources":["../../../../../src/components/Company/StateTaxes/StateTaxesList/context.ts"],"sourcesContent":["import type { TaxRequirementStatesList } from '@gusto/embedded-api-v-2025-11-15/models/components/taxrequirementstateslist'\nimport { createCompoundContext } from '@/components/Base'\n\ntype StateTaxesListContextType = {\n isPending: boolean\n stateTaxRequirements: TaxRequirementStatesList[]\n handleContinue: () => void\n handleChange: (state: string) => void\n}\n\nconst [useStateTaxesList, StateTaxesListProvider] =\n createCompoundContext<StateTaxesListContextType>('StateTaxesListContext')\n\nexport { useStateTaxesList, StateTaxesListProvider }\n"],"names":["useStateTaxesList","StateTaxesListProvider","createCompoundContext"],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sources":["../../../../../src/components/Company/StateTaxes/StateTaxesList/context.ts"],"sourcesContent":["import type { TaxRequirementStatesList } from '@gusto/embedded-api-v-2025-11-15/models/components/taxrequirementstateslist'\nimport { createCompoundContext } from '@/components/Base'\n\ntype StateTaxesListContextType = {\n isPending: boolean\n stateTaxRequirements: TaxRequirementStatesList[]\n handleContinue: () => void\n handleChange: (state: string) => void\n}\n\nconst [useStateTaxesList, StateTaxesListProvider] =\n createCompoundContext<StateTaxesListContextType>('StateTaxesListContext')\n\nexport { useStateTaxesList, StateTaxesListProvider }\n"],"names":["useStateTaxesList","StateTaxesListProvider","createCompoundContext"],"mappings":";;;;;;;;;;;;;;;;AAUA,MAAM,CAACA,GAAmBC,CAAsB,IAC9CC,EAAiD,uBAAuB;"}
|
|
@@ -28,6 +28,7 @@ export type ContractorAddressField = "street1" | "street2" | "city" | "state" |
|
|
|
28
28
|
* Shape of the values managed by the contractor address form.
|
|
29
29
|
*
|
|
30
30
|
* @public
|
|
31
|
+
* @interface
|
|
31
32
|
*/
|
|
32
33
|
export type ContractorAddressFormData = { street1: string; street2: string; city: string; state: string; zip: string; };
|
|
33
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractorAddressSchema.js","sources":["../../../../../../src/components/Contractor/Address/shared/useContractorAddressForm/contractorAddressSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n buildFormSchema,\n type RequiredFieldConfig,\n type OptionalFieldsToRequire,\n} from '@/partner-hook-utils/form/buildFormSchema'\n\n// ── Error codes ────────────────────────────────────────────────────────\n\n/**\n * Validation error codes emitted by the contractor address form schema. Map\n * these codes to localized copy in `validationMessages` when composing the\n * hook.\n *\n * @public\n */\nexport const ContractorAddressErrorCodes = {\n REQUIRED: 'REQUIRED',\n INVALID_ZIP: 'INVALID_ZIP',\n} as const\n\n/**\n * Union of validation error code strings emitted by the contractor address\n * form schema.\n *\n * @public\n */\nexport type ContractorAddressErrorCode =\n (typeof ContractorAddressErrorCodes)[keyof typeof ContractorAddressErrorCodes]\n\n// ── Field validators ───────────────────────────────────────────────────\n\nconst ZIP_REGEX = /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/\n\nconst fieldValidators = {\n street1: z.string(),\n street2: z.string(),\n city: z.string(),\n state: z.string(),\n zip: z.string().regex(ZIP_REGEX, { message: ContractorAddressErrorCodes.INVALID_ZIP }),\n}\n\n/**\n * Field names accepted by the contractor address form.\n *\n * @public\n */\nexport type ContractorAddressField = keyof typeof fieldValidators\n\n/**\n * Shape of the values managed by the contractor address form.\n *\n * @public\n */\nexport type ContractorAddressFormData = {\n [K in keyof typeof fieldValidators]: z.infer<(typeof fieldValidators)[K]>\n}\n/**\n * Shape of the validated values produced by the contractor address form on\n * submit.\n *\n * @public\n */\nexport type ContractorAddressFormOutputs = ContractorAddressFormData\n\n// ── Required fields config ─────────────────────────────────────────────\n\n// The contractor address API treats every address field as optional — only\n// `version` is required, and that is not a form field. The hook mirrors that\n// contract so partners get API-aligned defaults; consumers that need stricter\n// requiredness (e.g. the SDK's own Address component) opt in via\n// `optionalFieldsToRequire`.\nconst requiredFieldsConfig = {\n street1: 'never',\n street2: 'never',\n city: 'never',\n state: 'never',\n zip: 'never',\n} satisfies RequiredFieldConfig<typeof fieldValidators>\n\n// ── Schema factory ─────────────────────────────────────────────────────\n\n/**\n * Keys of optional contractor address fields that can be promoted to required\n * via the hook's `optionalFieldsToRequire` option.\n *\n * @public\n */\nexport type ContractorAddressOptionalFieldsToRequire = OptionalFieldsToRequire<\n typeof requiredFieldsConfig\n>\n\n/** @internal */\ninterface ContractorAddressSchemaOptions {\n optionalFieldsToRequire?: ContractorAddressOptionalFieldsToRequire\n}\n\n/** @internal */\nexport function createContractorAddressSchema(options: ContractorAddressSchemaOptions = {}) {\n const { optionalFieldsToRequire } = options\n\n return buildFormSchema(fieldValidators, {\n requiredFieldsConfig,\n requiredErrorCode: ContractorAddressErrorCodes.REQUIRED,\n mode: 'update',\n optionalFieldsToRequire,\n })\n}\n"],"names":["ContractorAddressErrorCodes","ZIP_REGEX","fieldValidators","z","requiredFieldsConfig","createContractorAddressSchema","options","optionalFieldsToRequire","buildFormSchema"],"mappings":";;AAgBO,MAAMA,IAA8B;AAAA,EACzC,UAAU;AAAA,EACV,aAAa;AACf,GAaMC,IAAY,6BAEZC,IAAkB;AAAA,EACtB,SAASC,EAAE,OAAA;AAAA,EACX,SAASA,EAAE,OAAA;AAAA,EACX,MAAMA,EAAE,OAAA;AAAA,EACR,OAAOA,EAAE,OAAA;AAAA,EACT,KAAKA,EAAE,SAAS,MAAMF,GAAW,EAAE,SAASD,EAA4B,YAAA,CAAa;AACvF,
|
|
1
|
+
{"version":3,"file":"contractorAddressSchema.js","sources":["../../../../../../src/components/Contractor/Address/shared/useContractorAddressForm/contractorAddressSchema.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n buildFormSchema,\n type RequiredFieldConfig,\n type OptionalFieldsToRequire,\n} from '@/partner-hook-utils/form/buildFormSchema'\n\n// ── Error codes ────────────────────────────────────────────────────────\n\n/**\n * Validation error codes emitted by the contractor address form schema. Map\n * these codes to localized copy in `validationMessages` when composing the\n * hook.\n *\n * @public\n */\nexport const ContractorAddressErrorCodes = {\n REQUIRED: 'REQUIRED',\n INVALID_ZIP: 'INVALID_ZIP',\n} as const\n\n/**\n * Union of validation error code strings emitted by the contractor address\n * form schema.\n *\n * @public\n */\nexport type ContractorAddressErrorCode =\n (typeof ContractorAddressErrorCodes)[keyof typeof ContractorAddressErrorCodes]\n\n// ── Field validators ───────────────────────────────────────────────────\n\nconst ZIP_REGEX = /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/\n\nconst fieldValidators = {\n street1: z.string(),\n street2: z.string(),\n city: z.string(),\n state: z.string(),\n zip: z.string().regex(ZIP_REGEX, { message: ContractorAddressErrorCodes.INVALID_ZIP }),\n}\n\n/**\n * Field names accepted by the contractor address form.\n *\n * @public\n */\nexport type ContractorAddressField = keyof typeof fieldValidators\n\n/**\n * Shape of the values managed by the contractor address form.\n *\n * @public\n * @interface\n */\nexport type ContractorAddressFormData = {\n [K in keyof typeof fieldValidators]: z.infer<(typeof fieldValidators)[K]>\n}\n/**\n * Shape of the validated values produced by the contractor address form on\n * submit.\n *\n * @public\n */\nexport type ContractorAddressFormOutputs = ContractorAddressFormData\n\n// ── Required fields config ─────────────────────────────────────────────\n\n// The contractor address API treats every address field as optional — only\n// `version` is required, and that is not a form field. The hook mirrors that\n// contract so partners get API-aligned defaults; consumers that need stricter\n// requiredness (e.g. the SDK's own Address component) opt in via\n// `optionalFieldsToRequire`.\nconst requiredFieldsConfig = {\n street1: 'never',\n street2: 'never',\n city: 'never',\n state: 'never',\n zip: 'never',\n} satisfies RequiredFieldConfig<typeof fieldValidators>\n\n// ── Schema factory ─────────────────────────────────────────────────────\n\n/**\n * Keys of optional contractor address fields that can be promoted to required\n * via the hook's `optionalFieldsToRequire` option.\n *\n * @public\n */\nexport type ContractorAddressOptionalFieldsToRequire = OptionalFieldsToRequire<\n typeof requiredFieldsConfig\n>\n\n/** @internal */\ninterface ContractorAddressSchemaOptions {\n optionalFieldsToRequire?: ContractorAddressOptionalFieldsToRequire\n}\n\n/** @internal */\nexport function createContractorAddressSchema(options: ContractorAddressSchemaOptions = {}) {\n const { optionalFieldsToRequire } = options\n\n return buildFormSchema(fieldValidators, {\n requiredFieldsConfig,\n requiredErrorCode: ContractorAddressErrorCodes.REQUIRED,\n mode: 'update',\n optionalFieldsToRequire,\n })\n}\n"],"names":["ContractorAddressErrorCodes","ZIP_REGEX","fieldValidators","z","requiredFieldsConfig","createContractorAddressSchema","options","optionalFieldsToRequire","buildFormSchema"],"mappings":";;AAgBO,MAAMA,IAA8B;AAAA,EACzC,UAAU;AAAA,EACV,aAAa;AACf,GAaMC,IAAY,6BAEZC,IAAkB;AAAA,EACtB,SAASC,EAAE,OAAA;AAAA,EACX,SAASA,EAAE,OAAA;AAAA,EACX,MAAMA,EAAE,OAAA;AAAA,EACR,OAAOA,EAAE,OAAA;AAAA,EACT,KAAKA,EAAE,SAAS,MAAMF,GAAW,EAAE,SAASD,EAA4B,YAAA,CAAa;AACvF,GAiCMI,IAAuB;AAAA,EAC3B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AACP;AAoBO,SAASC,EAA8BC,IAA0C,IAAI;AAC1F,QAAM,EAAE,yBAAAC,MAA4BD;AAEpC,SAAOE,EAAgBN,GAAiB;AAAA,IACtC,sBAAAE;AAAA,IACA,mBAAmBJ,EAA4B;AAAA,IAC/C,MAAM;AAAA,IACN,yBAAAO;AAAA,EAAA,CACD;AACH;"}
|
|
@@ -90,6 +90,44 @@ export interface UseContractorAddressFormReady extends BaseFormHookReady<FieldsM
|
|
|
90
90
|
* @param props - See {@link UseContractorAddressFormProps}.
|
|
91
91
|
* @returns A {@link HookLoadingResult} while loading, or a {@link UseContractorAddressFormReady} once ready.
|
|
92
92
|
* @public
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```tsx
|
|
96
|
+
* import {
|
|
97
|
+
* useContractorAddressForm,
|
|
98
|
+
* SDKFormProvider,
|
|
99
|
+
* type UseContractorAddressFormReady,
|
|
100
|
+
* } from '@gusto/embedded-react-sdk'
|
|
101
|
+
*
|
|
102
|
+
* function ContractorAddressPage({ contractorId }: { contractorId: string }) {
|
|
103
|
+
* const contractorAddress = useContractorAddressForm({ contractorId })
|
|
104
|
+
*
|
|
105
|
+
* if (contractorAddress.isLoading) return <div>Loading...</div>
|
|
106
|
+
*
|
|
107
|
+
* return <ContractorAddressReady contractorAddress={contractorAddress} />
|
|
108
|
+
* }
|
|
109
|
+
*
|
|
110
|
+
* function ContractorAddressReady({
|
|
111
|
+
* contractorAddress,
|
|
112
|
+
* }: {
|
|
113
|
+
* contractorAddress: UseContractorAddressFormReady
|
|
114
|
+
* }) {
|
|
115
|
+
* const { Fields } = contractorAddress.form
|
|
116
|
+
*
|
|
117
|
+
* return (
|
|
118
|
+
* <SDKFormProvider formHookResult={contractorAddress}>
|
|
119
|
+
* <form onSubmit={e => { e.preventDefault(); void contractorAddress.actions.onSubmit() }}>
|
|
120
|
+
* <Fields.Street1 label="Street address" />
|
|
121
|
+
* <Fields.Street2 label="Apt, suite, etc. (optional)" />
|
|
122
|
+
* <Fields.City label="City" />
|
|
123
|
+
* <Fields.State label="State" />
|
|
124
|
+
* <Fields.Zip label="ZIP code" />
|
|
125
|
+
* <button type="submit" disabled={contractorAddress.status.isPending}>Save</button>
|
|
126
|
+
* </form>
|
|
127
|
+
* </SDKFormProvider>
|
|
128
|
+
* )
|
|
129
|
+
* }
|
|
130
|
+
* ```
|
|
93
131
|
*/
|
|
94
132
|
export declare function useContractorAddressForm({ contractorId, optionalFieldsToRequire, defaultValues: partnerDefaults, validationMode, shouldFocusError, }: UseContractorAddressFormProps): HookLoadingResult | UseContractorAddressFormReady;
|
|
95
133
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContractorAddressForm.js","sources":["../../../../../../src/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type {\n Contractor,\n ContractorType,\n} from '@gusto/embedded-api-v-2025-11-15/models/components/contractor'\nimport type { ContractorAddress } from '@gusto/embedded-api-v-2025-11-15/models/components/contractoraddress'\nimport { useContractorsGet } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorsGet'\nimport { useContractorsGetAddress } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorsGetAddress'\nimport { useContractorsUpdateAddressMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorsUpdateAddress'\nimport {\n createContractorAddressSchema,\n type ContractorAddressOptionalFieldsToRequire,\n type ContractorAddressFormData,\n type ContractorAddressFormOutputs,\n} from './contractorAddressSchema'\nimport { Street1Field, Street2Field, CityField, StateField, ZipField } 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 FieldsMetadata,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { STATES_ABBR } from '@/shared/constants'\n\nexport type { ContractorAddressOptionalFieldsToRequire } from './contractorAddressSchema'\n\n/**\n * Optional overrides passed to {@link UseContractorAddressFormReady.actions.onSubmit | onSubmit}.\n *\n * @public\n */\nexport interface ContractorAddressSubmitOptions {\n /** Override the contractor identifier supplied to the hook. */\n contractorId?: string\n}\n\n/**\n * Configuration options for {@link useContractorAddressForm}.\n *\n * @public\n */\nexport interface UseContractorAddressFormProps {\n /** UUID of the contractor whose address is being edited. */\n contractorId: string\n /** Override fields that are optional by default to be required. See `ContractorAddressOptionalFieldsToRequire`. */\n optionalFieldsToRequire?: ContractorAddressOptionalFieldsToRequire\n /** Pre-fill form values. Server data takes precedence. */\n defaultValues?: Partial<ContractorAddressFormData>\n /** Passed through to react-hook-form. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Auto-focus the first invalid field on submit. Set to `false` when using `composeSubmitHandler` so submit-time focus is coordinated across multiple forms. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Pre-bound field components exposed on `useContractorAddressForm().form.Fields`.\n *\n * @public\n */\nexport interface ContractorAddressFields {\n /** Street address line 1 text input. Required. */\n Street1: typeof Street1Field\n /** Street address line 2 text input. Optional. */\n Street2: typeof Street2Field\n /** City text input. Required. */\n City: typeof CityField\n /** State selector. Required. */\n State: typeof StateField\n /** ZIP code text input. Required. */\n Zip: typeof ZipField\n}\n\n/**\n * Ready-state shape returned by {@link useContractorAddressForm} once data has loaded.\n *\n * @remarks\n * Discriminated by `isLoading: false`. Extends {@link BaseFormHookReady} with\n * the contractor-address-specific `data`, `status`, `actions`, and `form.Fields` shape.\n *\n * @public\n */\nexport interface UseContractorAddressFormReady extends BaseFormHookReady<\n FieldsMetadata,\n ContractorAddressFormData,\n ContractorAddressFields\n> {\n /** Static entity data resolved from the API. */\n data: {\n /** The contractor address row loaded for update. */\n contractorAddress: ContractorAddress\n /** The full contractor entity loaded alongside the address. */\n contractor: Contractor\n /** The contractor's type — drives whether the address is labelled \"home\" (Individual) or \"business\" (Business). */\n contractorType: ContractorType | undefined\n }\n /** Reactive status flags. */\n status: { isPending: boolean; mode: 'update' }\n /** Available actions. */\n actions: {\n onSubmit: (\n options?: ContractorAddressSubmitOptions,\n ) => Promise<HookSubmitResult<ContractorAddress> | undefined>\n }\n}\n\n/**\n * Form hook for editing a contractor's address.\n *\n * @remarks\n * A contractor always has exactly one address (created with the contractor),\n * so this hook operates only in update mode and issues a PUT on submit. The\n * same address is labelled a \"home\" address for Individual contractors and a\n * \"business\" address for Business contractors; the hook exposes `contractorType`\n * so the consuming component can choose the appropriate copy.\n *\n * @param props - See {@link UseContractorAddressFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseContractorAddressFormReady} once ready.\n * @public\n */\nexport function useContractorAddressForm({\n contractorId,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseContractorAddressFormProps): HookLoadingResult | UseContractorAddressFormReady {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId },\n { enabled: !!contractorId },\n )\n const addressQuery = useContractorsGetAddress(\n { contractorUuid: contractorId },\n { enabled: !!contractorId },\n )\n\n const contractor = contractorQuery.data?.contractor\n const contractorType = contractor?.type\n const fetchedAddress = addressQuery.data?.contractorAddress\n\n const [schema, metadataConfig] = useMemo(\n () => createContractorAddressSchema({ optionalFieldsToRequire }),\n [optionalFieldsToRequire],\n )\n\n const resolvedDefaults: ContractorAddressFormData = useMemo(\n () => ({\n street1: fetchedAddress?.street1 ?? partnerDefaults?.street1 ?? '',\n street2: fetchedAddress?.street2 ?? partnerDefaults?.street2 ?? '',\n city: fetchedAddress?.city ?? partnerDefaults?.city ?? '',\n state: fetchedAddress?.state ?? partnerDefaults?.state ?? '',\n zip: fetchedAddress?.zip ?? partnerDefaults?.zip ?? '',\n }),\n [fetchedAddress, partnerDefaults],\n )\n\n const formMethods = useForm<ContractorAddressFormData, unknown, ContractorAddressFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const updateAddressMutation = useContractorsUpdateAddressMutation()\n\n const isPending = updateAddressMutation.isPending\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorAddressForm')\n\n const errorHandling = composeErrorHandler([contractorQuery, addressQuery], {\n submitError,\n setSubmitError,\n })\n\n const stateOptions = STATES_ABBR.map(abbr => ({\n value: abbr,\n label: abbr,\n }))\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = {\n street1: baseMetadata.street1,\n street2: baseMetadata.street2,\n city: baseMetadata.city,\n state: withOptions(baseMetadata.state, stateOptions, STATES_ABBR),\n zip: baseMetadata.zip,\n }\n\n const onSubmit = async (\n options?: ContractorAddressSubmitOptions,\n ): Promise<HookSubmitResult<ContractorAddress> | undefined> => {\n let submitResult: HookSubmitResult<ContractorAddress> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: ContractorAddressFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const resolvedContractorId = options?.contractorId ?? contractorId\n\n if (!fetchedAddress?.version) {\n throw new SDKInternalError(\n 'Cannot update contractor address: no matching address on file',\n )\n }\n\n const result = await updateAddressMutation.mutateAsync({\n request: {\n contractorUuid: resolvedContractorId,\n contractorAddressUpdateBody: {\n version: fetchedAddress.version,\n street1: payload.street1,\n street2: payload.street2 || undefined,\n city: payload.city,\n state: payload.state,\n zip: payload.zip,\n },\n },\n })\n\n if (!result.contractorAddress) {\n throw new SDKInternalError('Contractor address update failed')\n }\n\n submitResult = {\n mode: 'update',\n data: result.contractorAddress,\n }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n if (!contractor || !fetchedAddress) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n contractorAddress: fetchedAddress,\n contractor,\n contractorType,\n },\n status: {\n isPending,\n mode: 'update' as const,\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n Street1: Street1Field,\n Street2: Street2Field,\n City: CityField,\n State: StateField,\n Zip: ZipField,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Discriminated union returned by {@link useContractorAddressForm}.\n *\n * @public\n */\nexport type UseContractorAddressFormResult = HookLoadingResult | UseContractorAddressFormReady\n/**\n * Type of `form.fieldsMetadata` returned by {@link useContractorAddressForm}.\n *\n * @public\n */\nexport type ContractorAddressFieldsMetadata =\n UseContractorAddressFormReady['form']['fieldsMetadata']\n/**\n * Type of `form.Fields` returned by {@link useContractorAddressForm}.\n *\n * @public\n */\nexport type ContractorAddressFormFields = UseContractorAddressFormReady['form']['Fields']\n"],"names":["useContractorAddressForm","contractorId","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","contractorQuery","useContractorsGet","addressQuery","useContractorsGetAddress","contractor","contractorType","fetchedAddress","schema","metadataConfig","useMemo","createContractorAddressSchema","resolvedDefaults","formMethods","useForm","zodResolver","updateAddressMutation","useContractorsUpdateAddressMutation","isPending","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","stateOptions","STATES_ABBR","abbr","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","withOptions","onSubmit","options","submitResult","resolve","data","payload","resolvedContractorId","SDKInternalError","result","hookFormInternals","useHookFormInternals","Street1Field","Street2Field","CityField","StateField","ZipField","createGetFormSubmissionValues"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useContractorAddressForm.js","sources":["../../../../../../src/components/Contractor/Address/shared/useContractorAddressForm/useContractorAddressForm.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { useForm } from 'react-hook-form'\nimport type { UseFormProps } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type {\n Contractor,\n ContractorType,\n} from '@gusto/embedded-api-v-2025-11-15/models/components/contractor'\nimport type { ContractorAddress } from '@gusto/embedded-api-v-2025-11-15/models/components/contractoraddress'\nimport { useContractorsGet } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorsGet'\nimport { useContractorsGetAddress } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorsGetAddress'\nimport { useContractorsUpdateAddressMutation } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorsUpdateAddress'\nimport {\n createContractorAddressSchema,\n type ContractorAddressOptionalFieldsToRequire,\n type ContractorAddressFormData,\n type ContractorAddressFormOutputs,\n} from './contractorAddressSchema'\nimport { Street1Field, Street2Field, CityField, StateField, ZipField } 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 FieldsMetadata,\n HookLoadingResult,\n HookSubmitResult,\n} from '@/partner-hook-utils/types'\nimport { useBaseSubmit } from '@/components/Base/useBaseSubmit'\nimport { SDKInternalError } from '@/types/sdkError'\nimport { STATES_ABBR } from '@/shared/constants'\n\nexport type { ContractorAddressOptionalFieldsToRequire } from './contractorAddressSchema'\n\n/**\n * Optional overrides passed to {@link UseContractorAddressFormReady.actions.onSubmit | onSubmit}.\n *\n * @public\n */\nexport interface ContractorAddressSubmitOptions {\n /** Override the contractor identifier supplied to the hook. */\n contractorId?: string\n}\n\n/**\n * Configuration options for {@link useContractorAddressForm}.\n *\n * @public\n */\nexport interface UseContractorAddressFormProps {\n /** UUID of the contractor whose address is being edited. */\n contractorId: string\n /** Override fields that are optional by default to be required. See `ContractorAddressOptionalFieldsToRequire`. */\n optionalFieldsToRequire?: ContractorAddressOptionalFieldsToRequire\n /** Pre-fill form values. Server data takes precedence. */\n defaultValues?: Partial<ContractorAddressFormData>\n /** Passed through to react-hook-form. Defaults to `'onSubmit'`. */\n validationMode?: UseFormProps['mode']\n /** Auto-focus the first invalid field on submit. Set to `false` when using `composeSubmitHandler` so submit-time focus is coordinated across multiple forms. Defaults to `true`. */\n shouldFocusError?: boolean\n}\n\n/**\n * Pre-bound field components exposed on `useContractorAddressForm().form.Fields`.\n *\n * @public\n */\nexport interface ContractorAddressFields {\n /** Street address line 1 text input. Required. */\n Street1: typeof Street1Field\n /** Street address line 2 text input. Optional. */\n Street2: typeof Street2Field\n /** City text input. Required. */\n City: typeof CityField\n /** State selector. Required. */\n State: typeof StateField\n /** ZIP code text input. Required. */\n Zip: typeof ZipField\n}\n\n/**\n * Ready-state shape returned by {@link useContractorAddressForm} once data has loaded.\n *\n * @remarks\n * Discriminated by `isLoading: false`. Extends {@link BaseFormHookReady} with\n * the contractor-address-specific `data`, `status`, `actions`, and `form.Fields` shape.\n *\n * @public\n */\nexport interface UseContractorAddressFormReady extends BaseFormHookReady<\n FieldsMetadata,\n ContractorAddressFormData,\n ContractorAddressFields\n> {\n /** Static entity data resolved from the API. */\n data: {\n /** The contractor address row loaded for update. */\n contractorAddress: ContractorAddress\n /** The full contractor entity loaded alongside the address. */\n contractor: Contractor\n /** The contractor's type — drives whether the address is labelled \"home\" (Individual) or \"business\" (Business). */\n contractorType: ContractorType | undefined\n }\n /** Reactive status flags. */\n status: { isPending: boolean; mode: 'update' }\n /** Available actions. */\n actions: {\n onSubmit: (\n options?: ContractorAddressSubmitOptions,\n ) => Promise<HookSubmitResult<ContractorAddress> | undefined>\n }\n}\n\n/**\n * Form hook for editing a contractor's address.\n *\n * @remarks\n * A contractor always has exactly one address (created with the contractor),\n * so this hook operates only in update mode and issues a PUT on submit. The\n * same address is labelled a \"home\" address for Individual contractors and a\n * \"business\" address for Business contractors; the hook exposes `contractorType`\n * so the consuming component can choose the appropriate copy.\n *\n * @param props - See {@link UseContractorAddressFormProps}.\n * @returns A {@link HookLoadingResult} while loading, or a {@link UseContractorAddressFormReady} once ready.\n * @public\n *\n * @example\n * ```tsx\n * import {\n * useContractorAddressForm,\n * SDKFormProvider,\n * type UseContractorAddressFormReady,\n * } from '@gusto/embedded-react-sdk'\n *\n * function ContractorAddressPage({ contractorId }: { contractorId: string }) {\n * const contractorAddress = useContractorAddressForm({ contractorId })\n *\n * if (contractorAddress.isLoading) return <div>Loading...</div>\n *\n * return <ContractorAddressReady contractorAddress={contractorAddress} />\n * }\n *\n * function ContractorAddressReady({\n * contractorAddress,\n * }: {\n * contractorAddress: UseContractorAddressFormReady\n * }) {\n * const { Fields } = contractorAddress.form\n *\n * return (\n * <SDKFormProvider formHookResult={contractorAddress}>\n * <form onSubmit={e => { e.preventDefault(); void contractorAddress.actions.onSubmit() }}>\n * <Fields.Street1 label=\"Street address\" />\n * <Fields.Street2 label=\"Apt, suite, etc. (optional)\" />\n * <Fields.City label=\"City\" />\n * <Fields.State label=\"State\" />\n * <Fields.Zip label=\"ZIP code\" />\n * <button type=\"submit\" disabled={contractorAddress.status.isPending}>Save</button>\n * </form>\n * </SDKFormProvider>\n * )\n * }\n * ```\n */\nexport function useContractorAddressForm({\n contractorId,\n optionalFieldsToRequire,\n defaultValues: partnerDefaults,\n validationMode = 'onSubmit',\n shouldFocusError = true,\n}: UseContractorAddressFormProps): HookLoadingResult | UseContractorAddressFormReady {\n const contractorQuery = useContractorsGet(\n { contractorUuid: contractorId },\n { enabled: !!contractorId },\n )\n const addressQuery = useContractorsGetAddress(\n { contractorUuid: contractorId },\n { enabled: !!contractorId },\n )\n\n const contractor = contractorQuery.data?.contractor\n const contractorType = contractor?.type\n const fetchedAddress = addressQuery.data?.contractorAddress\n\n const [schema, metadataConfig] = useMemo(\n () => createContractorAddressSchema({ optionalFieldsToRequire }),\n [optionalFieldsToRequire],\n )\n\n const resolvedDefaults: ContractorAddressFormData = useMemo(\n () => ({\n street1: fetchedAddress?.street1 ?? partnerDefaults?.street1 ?? '',\n street2: fetchedAddress?.street2 ?? partnerDefaults?.street2 ?? '',\n city: fetchedAddress?.city ?? partnerDefaults?.city ?? '',\n state: fetchedAddress?.state ?? partnerDefaults?.state ?? '',\n zip: fetchedAddress?.zip ?? partnerDefaults?.zip ?? '',\n }),\n [fetchedAddress, partnerDefaults],\n )\n\n const formMethods = useForm<ContractorAddressFormData, unknown, ContractorAddressFormOutputs>({\n resolver: zodResolver(schema),\n mode: validationMode,\n shouldFocusError,\n defaultValues: resolvedDefaults,\n values: resolvedDefaults,\n resetOptions: { keepDirtyValues: true },\n })\n\n const updateAddressMutation = useContractorsUpdateAddressMutation()\n\n const isPending = updateAddressMutation.isPending\n\n const {\n baseSubmitHandler,\n error: submitError,\n setError: setSubmitError,\n } = useBaseSubmit('ContractorAddressForm')\n\n const errorHandling = composeErrorHandler([contractorQuery, addressQuery], {\n submitError,\n setSubmitError,\n })\n\n const stateOptions = STATES_ABBR.map(abbr => ({\n value: abbr,\n label: abbr,\n }))\n\n const baseMetadata = useDeriveFieldsMetadata(metadataConfig, formMethods.control)\n const fieldsMetadata = {\n street1: baseMetadata.street1,\n street2: baseMetadata.street2,\n city: baseMetadata.city,\n state: withOptions(baseMetadata.state, stateOptions, STATES_ABBR),\n zip: baseMetadata.zip,\n }\n\n const onSubmit = async (\n options?: ContractorAddressSubmitOptions,\n ): Promise<HookSubmitResult<ContractorAddress> | undefined> => {\n let submitResult: HookSubmitResult<ContractorAddress> | undefined\n\n await new Promise<void>(resolve => {\n void formMethods.handleSubmit(\n async (data: ContractorAddressFormOutputs) => {\n await baseSubmitHandler(data, async payload => {\n const resolvedContractorId = options?.contractorId ?? contractorId\n\n if (!fetchedAddress?.version) {\n throw new SDKInternalError(\n 'Cannot update contractor address: no matching address on file',\n )\n }\n\n const result = await updateAddressMutation.mutateAsync({\n request: {\n contractorUuid: resolvedContractorId,\n contractorAddressUpdateBody: {\n version: fetchedAddress.version,\n street1: payload.street1,\n street2: payload.street2 || undefined,\n city: payload.city,\n state: payload.state,\n zip: payload.zip,\n },\n },\n })\n\n if (!result.contractorAddress) {\n throw new SDKInternalError('Contractor address update failed')\n }\n\n submitResult = {\n mode: 'update',\n data: result.contractorAddress,\n }\n })\n resolve()\n },\n () => {\n resolve()\n },\n )()\n })\n\n return submitResult\n }\n\n const hookFormInternals = useHookFormInternals(formMethods)\n\n if (!contractor || !fetchedAddress) {\n return { isLoading: true as const, errorHandling }\n }\n\n return {\n isLoading: false as const,\n data: {\n contractorAddress: fetchedAddress,\n contractor,\n contractorType,\n },\n status: {\n isPending,\n mode: 'update' as const,\n },\n actions: { onSubmit },\n errorHandling,\n form: {\n Fields: {\n Street1: Street1Field,\n Street2: Street2Field,\n City: CityField,\n State: StateField,\n Zip: ZipField,\n },\n fieldsMetadata,\n hookFormInternals,\n getFormSubmissionValues: createGetFormSubmissionValues(formMethods, schema),\n },\n }\n}\n\n/**\n * Discriminated union returned by {@link useContractorAddressForm}.\n *\n * @public\n */\nexport type UseContractorAddressFormResult = HookLoadingResult | UseContractorAddressFormReady\n/**\n * Type of `form.fieldsMetadata` returned by {@link useContractorAddressForm}.\n *\n * @public\n */\nexport type ContractorAddressFieldsMetadata =\n UseContractorAddressFormReady['form']['fieldsMetadata']\n/**\n * Type of `form.Fields` returned by {@link useContractorAddressForm}.\n *\n * @public\n */\nexport type ContractorAddressFormFields = UseContractorAddressFormReady['form']['Fields']\n"],"names":["useContractorAddressForm","contractorId","optionalFieldsToRequire","partnerDefaults","validationMode","shouldFocusError","contractorQuery","useContractorsGet","addressQuery","useContractorsGetAddress","contractor","contractorType","fetchedAddress","schema","metadataConfig","useMemo","createContractorAddressSchema","resolvedDefaults","formMethods","useForm","zodResolver","updateAddressMutation","useContractorsUpdateAddressMutation","isPending","baseSubmitHandler","submitError","setSubmitError","useBaseSubmit","errorHandling","composeErrorHandler","stateOptions","STATES_ABBR","abbr","baseMetadata","useDeriveFieldsMetadata","fieldsMetadata","withOptions","onSubmit","options","submitResult","resolve","data","payload","resolvedContractorId","SDKInternalError","result","hookFormInternals","useHookFormInternals","Street1Field","Street2Field","CityField","StateField","ZipField","createGetFormSubmissionValues"],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export interface UseContractorDocumentsListParams {
|
|
|
13
13
|
* Ready-state shape returned by {@link useContractorDocumentsList} once the documents have loaded.
|
|
14
14
|
*
|
|
15
15
|
* @public
|
|
16
|
+
* @interface
|
|
16
17
|
*/
|
|
17
18
|
export type UseContractorDocumentsListReady = BaseHookReady<{
|
|
18
19
|
documents: Document[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContractorDocumentsList.js","sources":["../../../../../../src/components/Contractor/Documents/DocumentsList/useContractorDocumentsList/useContractorDocumentsList.tsx"],"sourcesContent":["import { useContractorDocumentsGetAll } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorDocumentsGetAll'\nimport type { Document } from '@gusto/embedded-api-v-2025-11-15/models/components/document'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type { BaseHookReady, HookLoadingResult } from '@/partner-hook-utils/types'\n\n/**\n * Parameters for {@link useContractorDocumentsList}.\n *\n * @public\n */\nexport interface UseContractorDocumentsListParams {\n /** The associated contractor identifier. */\n contractorId: string\n}\n\n/**\n * Ready-state shape returned by {@link useContractorDocumentsList} once the documents have loaded.\n *\n * @public\n */\nexport type UseContractorDocumentsListReady = BaseHookReady<\n { documents: Document[] },\n { isFetching: boolean }\n>\n\n/**\n * Result of {@link useContractorDocumentsList} — a discriminated union of loading and ready states.\n *\n * @public\n */\nexport type UseContractorDocumentsListResult = HookLoadingResult | UseContractorDocumentsListReady\n\n/**\n * Standalone data hook for a contractor's documents.\n *\n * @remarks\n * Wraps the `contractorDocumentsGetAll` query in the standard\n * {@link BaseHookReady} shape. Read-only — viewing or signing a document is\n * handled by the screen the parent routes to, so this hook exposes no actions.\n *\n * @param params - See {@link UseContractorDocumentsListParams}.\n * @returns A {@link HookLoadingResult} while loading, or the ready state with `data.documents` once loaded.\n * @public\n *\n * @example\n * ```tsx\n * import { useContractorDocumentsList } from '@gusto/embedded-react-sdk'\n *\n * function ContractorDocuments({ contractorId }: { contractorId: string }) {\n * const result = useContractorDocumentsList({ contractorId })\n *\n * if (result.isLoading) return <div>Loading...</div>\n *\n * return (\n * <ul>\n * {result.data.documents.map(doc => (\n * <li key={doc.uuid}>{doc.title}</li>\n * ))}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useContractorDocumentsList({\n contractorId,\n}: UseContractorDocumentsListParams): UseContractorDocumentsListResult {\n // staleTime: Infinity — the SDK QueryClient invalidates on any mutation\n // success, so a long stale time avoids redundant refetches on remount.\n const documentsQuery = useContractorDocumentsGetAll(\n { contractorUuid: contractorId },\n { staleTime: Infinity },\n )\n\n const errorHandling = composeErrorHandler([documentsQuery])\n\n if (documentsQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n return {\n isLoading: false,\n data: { documents: documentsQuery.data?.documents ?? [] },\n status: { isFetching: documentsQuery.isFetching },\n errorHandling,\n }\n}\n"],"names":["useContractorDocumentsList","contractorId","documentsQuery","useContractorDocumentsGetAll","errorHandling","composeErrorHandler"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"useContractorDocumentsList.js","sources":["../../../../../../src/components/Contractor/Documents/DocumentsList/useContractorDocumentsList/useContractorDocumentsList.tsx"],"sourcesContent":["import { useContractorDocumentsGetAll } from '@gusto/embedded-api-v-2025-11-15/react-query/contractorDocumentsGetAll'\nimport type { Document } from '@gusto/embedded-api-v-2025-11-15/models/components/document'\nimport { composeErrorHandler } from '@/partner-hook-utils/composeErrorHandler'\nimport type { BaseHookReady, HookLoadingResult } from '@/partner-hook-utils/types'\n\n/**\n * Parameters for {@link useContractorDocumentsList}.\n *\n * @public\n */\nexport interface UseContractorDocumentsListParams {\n /** The associated contractor identifier. */\n contractorId: string\n}\n\n/**\n * Ready-state shape returned by {@link useContractorDocumentsList} once the documents have loaded.\n *\n * @public\n * @interface\n */\nexport type UseContractorDocumentsListReady = BaseHookReady<\n { documents: Document[] },\n { isFetching: boolean }\n>\n\n/**\n * Result of {@link useContractorDocumentsList} — a discriminated union of loading and ready states.\n *\n * @public\n */\nexport type UseContractorDocumentsListResult = HookLoadingResult | UseContractorDocumentsListReady\n\n/**\n * Standalone data hook for a contractor's documents.\n *\n * @remarks\n * Wraps the `contractorDocumentsGetAll` query in the standard\n * {@link BaseHookReady} shape. Read-only — viewing or signing a document is\n * handled by the screen the parent routes to, so this hook exposes no actions.\n *\n * @param params - See {@link UseContractorDocumentsListParams}.\n * @returns A {@link HookLoadingResult} while loading, or the ready state with `data.documents` once loaded.\n * @public\n *\n * @example\n * ```tsx\n * import { useContractorDocumentsList } from '@gusto/embedded-react-sdk'\n *\n * function ContractorDocuments({ contractorId }: { contractorId: string }) {\n * const result = useContractorDocumentsList({ contractorId })\n *\n * if (result.isLoading) return <div>Loading...</div>\n *\n * return (\n * <ul>\n * {result.data.documents.map(doc => (\n * <li key={doc.uuid}>{doc.title}</li>\n * ))}\n * </ul>\n * )\n * }\n * ```\n */\nexport function useContractorDocumentsList({\n contractorId,\n}: UseContractorDocumentsListParams): UseContractorDocumentsListResult {\n // staleTime: Infinity — the SDK QueryClient invalidates on any mutation\n // success, so a long stale time avoids redundant refetches on remount.\n const documentsQuery = useContractorDocumentsGetAll(\n { contractorUuid: contractorId },\n { staleTime: Infinity },\n )\n\n const errorHandling = composeErrorHandler([documentsQuery])\n\n if (documentsQuery.isLoading) {\n return { isLoading: true, errorHandling }\n }\n\n return {\n isLoading: false,\n data: { documents: documentsQuery.data?.documents ?? [] },\n status: { isFetching: documentsQuery.isFetching },\n errorHandling,\n }\n}\n"],"names":["useContractorDocumentsList","contractorId","documentsQuery","useContractorDocumentsGetAll","errorHandling","composeErrorHandler"],"mappings":";;AAgEO,SAASA,EAA2B;AAAA,EACzC,cAAAC;AACF,GAAuE;AAGrE,QAAMC,IAAiBC;AAAA,IACrB,EAAE,gBAAgBF,EAAA;AAAA,IAClB,EAAE,WAAW,MAAA;AAAA,EAAS,GAGlBG,IAAgBC,EAAoB,CAACH,CAAc,CAAC;AAE1D,SAAIA,EAAe,YACV,EAAE,WAAW,IAAM,eAAAE,EAAA,IAGrB;AAAA,IACL,WAAW;AAAA,IACX,MAAM,EAAE,WAAWF,EAAe,MAAM,aAAa,CAAA,EAAC;AAAA,IACtD,QAAQ,EAAE,YAAYA,EAAe,WAAA;AAAA,IACrC,eAAAE;AAAA,EAAA;AAEJ;"}
|
|
@@ -11,11 +11,11 @@ import { OnboardingFlowProps } from './OnboardingFlowComponents';
|
|
|
11
11
|
* error and suspense boundaries.
|
|
12
12
|
*
|
|
13
13
|
* Each step of the flow is also exported as a standalone block (see the
|
|
14
|
-
*
|
|
14
|
+
* Blocks table) for composing a custom workflow when this orchestration
|
|
15
15
|
* is the wrong fit.
|
|
16
16
|
*
|
|
17
|
-
* The flow forwards every event emitted by its
|
|
18
|
-
* see the events table on each
|
|
17
|
+
* The flow forwards every event emitted by its blocks to `onEvent`;
|
|
18
|
+
* see the events table on each block for the full set of events and
|
|
19
19
|
* payloads observable from this flow.
|
|
20
20
|
*
|
|
21
21
|
* @events
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OnboardingFlow.js","sources":["../../../../src/components/Contractor/OnboardingFlow/OnboardingFlow.tsx"],"sourcesContent":["import { createMachine } from 'robot3'\nimport { useMemo } from 'react'\nimport { onboardingMachine } from './onboardingStateMachine'\nimport type { OnboardingFlowProps } from './OnboardingFlowComponents'\nimport {\n ContractorListContextual,\n type OnboardingFlowContextInterface,\n} from './OnboardingFlowComponents'\nimport { Flow } from '@/components/Flow/Flow'\n\n/**\n * Guided flow for admins to onboard a contractor to the company.\n *\n * @remarks\n * Renders a multi-step experience that collects every piece of information\n * required to add a contractor to a company. Begins on the contractor list\n * and transitions into the per-step screens when \"Add contractor\" or a row's\n * \"Edit\"/\"Continue\" action is invoked; the submit step returns to the list.\n * The flow is driven by an internal state machine and wraps each step in\n * error and suspense boundaries.\n *\n * Each step of the flow is also exported as a standalone block (see the\n *
|
|
1
|
+
{"version":3,"file":"OnboardingFlow.js","sources":["../../../../src/components/Contractor/OnboardingFlow/OnboardingFlow.tsx"],"sourcesContent":["import { createMachine } from 'robot3'\nimport { useMemo } from 'react'\nimport { onboardingMachine } from './onboardingStateMachine'\nimport type { OnboardingFlowProps } from './OnboardingFlowComponents'\nimport {\n ContractorListContextual,\n type OnboardingFlowContextInterface,\n} from './OnboardingFlowComponents'\nimport { Flow } from '@/components/Flow/Flow'\n\n/**\n * Guided flow for admins to onboard a contractor to the company.\n *\n * @remarks\n * Renders a multi-step experience that collects every piece of information\n * required to add a contractor to a company. Begins on the contractor list\n * and transitions into the per-step screens when \"Add contractor\" or a row's\n * \"Edit\"/\"Continue\" action is invoked; the submit step returns to the list.\n * The flow is driven by an internal state machine and wraps each step in\n * error and suspense boundaries.\n *\n * Each step of the flow is also exported as a standalone block (see the\n * Blocks table) for composing a custom workflow when this orchestration\n * is the wrong fit.\n *\n * The flow forwards every event emitted by its blocks to `onEvent`;\n * see the events table on each block for the full set of events and\n * payloads observable from this flow.\n *\n * @events\n * | Event | Description | Data |\n * | ----- | ----------- | ---- |\n * | `contractor/create` | Fired when the user chooses to add a new contractor | — |\n * | `contractor/update` | Fired when the user selects a contractor to edit | `{ contractorId: string }` |\n * | `contractor/deleted` | Fired when a contractor is deleted | `{ contractorId: string }` |\n * | `contractor/onboarding/continue` | Fired when the user chooses to continue onboarding a contractor | — |\n * | `contractor/created` | Fired when a new contractor is created successfully | Create contractor API response |\n * | `contractor/updated` | Fired when an existing contractor is updated | Update contractor API response |\n * | `contractor/profile/done` | Fired when the contractor profile step is complete | `{ contractorId: string, selfOnboarding: boolean }` |\n * | `contractor/address/updated` | Fired when the contractor address is updated | Create or update contractor address API response |\n * | `contractor/address/done` | Fired when the address step is complete | — |\n * | `contractor/bankAccount/created` | Fired when a bank account is created for the contractor | Create contractor bank account API response |\n * | `contractor/paymentMethod/updated` | Fired when the payment method is updated | Update contractor payment method API response |\n * | `contractor/paymentMethod/done` | Fired when the payment method step is complete | — |\n * | `contractor/newHireReport/updated` | Fired when the new hire report is updated | Update contractor API response |\n * | `contractor/newHireReport/done` | Fired when the new hire report step is complete | — |\n * | `contractor/onboardingStatus/updated` | Fired when the contractor's onboarding status is updated | Change contractor onboarding status API response |\n * | `contractor/submit/done` | Fired when the contractor submission is complete | `{ message: string }` or `{ onboardingStatus, message: string }` |\n * | `contractor/invite/selfOnboarding` | Fired when the contractor is invited for self-onboarding | `{ contractorId: string }` |\n *\n * @components\n * - {@link ContractorList}\n * - {@link ContractorProfile}\n * - {@link Address}\n * - {@link PaymentMethod}\n * - {@link NewHireReport}\n * - {@link ContractorSubmit}\n *\n * @param props - See {@link OnboardingFlowProps}.\n * @returns The multi-step onboarding flow with internal navigation between the contractor list and the per-step screens.\n * @public\n *\n * @example\n * ```tsx title=\"App.tsx\"\n * import { ContractorOnboarding, type EventType } from '@gusto/embedded-react-sdk'\n *\n * function MyApp() {\n * return (\n * <ContractorOnboarding.OnboardingFlow\n * companyId=\"a007e1ab-3595-43c2-ab4b-af7a5af2e365\"\n * onEvent={(eventType: EventType) => {\n * if (eventType === 'contractor/submit/done') {\n * // Contractor onboarding complete — navigate to your next screen\n * }\n * }}\n * />\n * )\n * }\n * ```\n */\nexport const OnboardingFlow = ({ companyId, onEvent, defaultValues }: OnboardingFlowProps) => {\n const onboardingFlow = useMemo(\n () =>\n createMachine(\n 'list',\n onboardingMachine,\n (initialContext: OnboardingFlowContextInterface) => ({\n ...initialContext,\n component: ContractorListContextual,\n companyId,\n defaultValues,\n selfOnboarding: false,\n }),\n ),\n [companyId, defaultValues],\n )\n return <Flow machine={onboardingFlow} onEvent={onEvent} />\n}\n"],"names":["OnboardingFlow","companyId","onEvent","defaultValues","onboardingFlow","useMemo","createMachine","onboardingMachine","initialContext","ContractorListContextual","jsx","Flow"],"mappings":";;;;;;AAgFO,MAAMA,IAAiB,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,eAAAC,QAAyC;AAC5F,QAAMC,IAAiBC;AAAA,IACrB,MACEC;AAAA,MACE;AAAA,MACAC;AAAA,MACA,CAACC,OAAoD;AAAA,QACnD,GAAGA;AAAA,QACH,WAAWC;AAAA,QACX,WAAAR;AAAA,QACA,eAAAE;AAAA,QACA,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,IAEJ,CAACF,GAAWE,CAAa;AAAA,EAAA;AAE3B,SAAO,gBAAAO,EAACC,GAAA,EAAK,SAASP,GAAgB,SAAAF,EAAA,CAAkB;AAC1D;"}
|
|
@@ -4,14 +4,14 @@ import { PaymentMethodProps } from './types';
|
|
|
4
4
|
*
|
|
5
5
|
* Displays the current payment type, lets the user switch between direct deposit and check, and
|
|
6
6
|
* collects bank account details (account holder name, routing number, account number, and account
|
|
7
|
-
* type) when direct deposit is selected.
|
|
8
|
-
* updates the contractor's payment method.
|
|
7
|
+
* type) when direct deposit is selected. Direct deposit creates the bank account (which updates the
|
|
8
|
+
* payment method server-side); check updates the contractor's payment method type directly.
|
|
9
9
|
*
|
|
10
10
|
* @events
|
|
11
11
|
* | Event | Description | Data |
|
|
12
12
|
* | ----- | ----------- | ---- |
|
|
13
|
-
* | `contractor/bankAccount/created` | Fired after
|
|
14
|
-
* | `contractor/paymentMethod/updated` | Fired after the payment method is updated | The
|
|
13
|
+
* | `contractor/bankAccount/created` | Fired on the direct deposit path after the bank account is created | The created bank account at `.contractorBankAccount` |
|
|
14
|
+
* | `contractor/paymentMethod/updated` | Fired on the check path after the payment method type is updated | The updated payment method at `.contractorPaymentMethod` |
|
|
15
15
|
* | `contractor/paymentMethod/done` | Fired when the payment method step completes | — |
|
|
16
16
|
*
|
|
17
17
|
* @param props - Component configuration; see {@link PaymentMethodProps}.
|
|
@@ -32,4 +32,4 @@ import { PaymentMethodProps } from './types';
|
|
|
32
32
|
* }
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
export declare function PaymentMethod(props: PaymentMethodProps): import("react").JSX.Element;
|
|
35
|
+
export declare function PaymentMethod({ dictionary, ...props }: PaymentMethodProps): import("react").JSX.Element;
|
|
@@ -1,116 +1,113 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useTranslation as
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
import { PAYMENT_METHODS as m, componentEvents as s } from "../../../shared/constants.js";
|
|
21
|
-
import { ActionsLayout as mt } from "../../Common/ActionsLayout/ActionsLayout.js";
|
|
22
|
-
import { Flex as st } from "../../Common/Flex/Flex.js";
|
|
23
|
-
import { routingNumberValidation as ut, accountNumberValidation as dt } from "../../../helpers/validations.js";
|
|
24
|
-
const pt = n.discriminatedUnion("type", [
|
|
25
|
-
n.object({
|
|
26
|
-
type: n.literal("Direct Deposit"),
|
|
27
|
-
name: n.string().min(1),
|
|
28
|
-
routingNumber: ut,
|
|
29
|
-
accountNumber: n.any(),
|
|
30
|
-
//Explicitely setting account number as most permissive
|
|
31
|
-
accountType: n.enum(["Checking", "Savings"])
|
|
32
|
-
}),
|
|
33
|
-
n.object({
|
|
34
|
-
type: n.literal("Check")
|
|
35
|
-
})
|
|
36
|
-
]);
|
|
37
|
-
function Ht(o) {
|
|
38
|
-
return /* @__PURE__ */ e(rt, { ...o, children: /* @__PURE__ */ e(yt, { ...o, children: o.children }) });
|
|
1
|
+
import { jsx as t, jsxs as d, Fragment as E } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslation as M } from "react-i18next";
|
|
3
|
+
import O from "classnames";
|
|
4
|
+
import { useContractorPaymentMethodForm as L } from "./shared/useContractorPaymentMethodForm/useContractorPaymentMethodForm.js";
|
|
5
|
+
import { useContractorBankAccountForm as _ } from "./shared/useContractorBankAccountForm/useContractorBankAccountForm.js";
|
|
6
|
+
import H from "./PaymentMethod.module.scss.js";
|
|
7
|
+
import { useComponentDictionary as P, useI18n as v } from "../../../i18n/I18n.js";
|
|
8
|
+
import { BaseBoundaries as B, BaseLayout as p } from "../../Base/Base.js";
|
|
9
|
+
import "../../Base/useBase.js";
|
|
10
|
+
import { useComponentContext as U } from "../../../contexts/ComponentAdapter/useComponentContext.js";
|
|
11
|
+
import { Form as I } from "../../Common/Form/Form.js";
|
|
12
|
+
import { PAYMENT_METHODS as b, componentEvents as c } from "../../../shared/constants.js";
|
|
13
|
+
import { composeErrorHandler as S } from "../../../partner-hook-utils/composeErrorHandler.js";
|
|
14
|
+
import { composeSubmitHandler as A } from "../../../partner-hook-utils/form/composeSubmitHandler.js";
|
|
15
|
+
import { ActionsLayout as x } from "../../Common/ActionsLayout/ActionsLayout.js";
|
|
16
|
+
import { Flex as Y } from "../../Common/Flex/Flex.js";
|
|
17
|
+
import "react";
|
|
18
|
+
function io({ dictionary: i, ...s }) {
|
|
19
|
+
return P("Contractor.PaymentMethod", i), /* @__PURE__ */ t(B, { componentName: "Contractor.PaymentMethod", children: /* @__PURE__ */ t(Q, { ...s }) });
|
|
39
20
|
}
|
|
40
|
-
function
|
|
41
|
-
|
|
42
|
-
const { t:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
accountType: M
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
a(s.CONTRACTOR_BANK_ACCOUNT_CREATED, w), p(!0);
|
|
83
|
-
const q = (await A.fetchQuery(k)).contractorPaymentMethod;
|
|
84
|
-
p(!1), y = q.version;
|
|
85
|
-
}
|
|
86
|
-
const F = await E({
|
|
87
|
-
request: {
|
|
88
|
-
contractorUuid: o,
|
|
89
|
-
requestBody: {
|
|
90
|
-
type: c.type,
|
|
91
|
-
version: y || i.version
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
a(s.CONTRACTOR_PAYMENT_METHOD_UPDATED, F), a(s.CONTRACTOR_PAYMENT_METHOD_DONE);
|
|
96
|
-
});
|
|
97
|
-
}, U = S === m.directDeposit;
|
|
98
|
-
return /* @__PURE__ */ e("section", { className: P, children: /* @__PURE__ */ e(V, { ...r, children: /* @__PURE__ */ e(it, { onSubmit: r.handleSubmit(_), children: /* @__PURE__ */ H(st, { gap: 32, flexDirection: "column", children: [
|
|
99
|
-
/* @__PURE__ */ e(d.Heading, { as: "h2", children: u("title") }),
|
|
100
|
-
/* @__PURE__ */ e(et, {}),
|
|
101
|
-
U && /* @__PURE__ */ e(tt, { bankAccount: t }),
|
|
102
|
-
/* @__PURE__ */ e(mt, { children: /* @__PURE__ */ e(
|
|
103
|
-
d.Button,
|
|
21
|
+
function Q({ contractorId: i, className: s, onEvent: a }) {
|
|
22
|
+
v("Contractor.PaymentMethod");
|
|
23
|
+
const { t: o } = M("Contractor.PaymentMethod"), m = U(), r = L({
|
|
24
|
+
contractorId: i,
|
|
25
|
+
shouldFocusError: !1
|
|
26
|
+
}), e = _({
|
|
27
|
+
contractorId: i,
|
|
28
|
+
shouldFocusError: !1
|
|
29
|
+
});
|
|
30
|
+
if (r.isLoading || e.isLoading) {
|
|
31
|
+
const n = S([r, e]);
|
|
32
|
+
return /* @__PURE__ */ t(p, { isLoading: !0, error: n.errors });
|
|
33
|
+
}
|
|
34
|
+
const u = r.status.isDirectDeposit, { Type: N } = r.form.Fields, { Name: f, RoutingNumber: D, AccountNumber: C, AccountType: T } = e.form.Fields, h = async () => {
|
|
35
|
+
const n = await e.actions.onSubmit();
|
|
36
|
+
n && (a(c.CONTRACTOR_BANK_ACCOUNT_CREATED, {
|
|
37
|
+
contractorBankAccount: n.data
|
|
38
|
+
}), a(c.CONTRACTOR_PAYMENT_METHOD_DONE));
|
|
39
|
+
}, g = async () => {
|
|
40
|
+
const n = await r.actions.onSubmit();
|
|
41
|
+
n && (a(c.CONTRACTOR_PAYMENT_METHOD_UPDATED, {
|
|
42
|
+
contractorPaymentMethod: n.data
|
|
43
|
+
}), a(c.CONTRACTOR_PAYMENT_METHOD_DONE));
|
|
44
|
+
}, { handleSubmit: F, errorHandling: R } = u ? A([r, e], h) : A([r], g), k = r.status.isPending || e.status.isPending, y = (n) => /* @__PURE__ */ t(
|
|
45
|
+
m.RadioGroup,
|
|
46
|
+
{
|
|
47
|
+
...n,
|
|
48
|
+
shouldVisuallyHideLabel: !0,
|
|
49
|
+
options: n.options.map((l) => ({
|
|
50
|
+
...l,
|
|
51
|
+
description: l.value === b.directDeposit ? o("directDepositDescription") : o("checkDescription")
|
|
52
|
+
}))
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
return /* @__PURE__ */ t("section", { className: O(H.root, s), children: /* @__PURE__ */ t(p, { error: R.errors, children: /* @__PURE__ */ t(I, { onSubmit: F, children: /* @__PURE__ */ d(Y, { gap: 32, flexDirection: "column", children: [
|
|
56
|
+
/* @__PURE__ */ t(m.Heading, { as: "h2", children: o("title") }),
|
|
57
|
+
/* @__PURE__ */ t(
|
|
58
|
+
N,
|
|
104
59
|
{
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
60
|
+
label: o("paymentFieldsetLegend"),
|
|
61
|
+
getOptionLabel: (n) => n === b.directDeposit ? o("directDepositLabel") : o("checkLabel"),
|
|
62
|
+
FieldComponent: y,
|
|
63
|
+
formHookResult: r
|
|
109
64
|
}
|
|
110
|
-
)
|
|
65
|
+
),
|
|
66
|
+
u && /* @__PURE__ */ d(E, { children: [
|
|
67
|
+
/* @__PURE__ */ t(
|
|
68
|
+
f,
|
|
69
|
+
{
|
|
70
|
+
label: o("bankAccountForm.nameLabel"),
|
|
71
|
+
validationMessages: { REQUIRED: o("bankAccountForm.validations.accountName") },
|
|
72
|
+
formHookResult: e
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
/* @__PURE__ */ t(
|
|
76
|
+
D,
|
|
77
|
+
{
|
|
78
|
+
label: o("bankAccountForm.routingNumberLabel"),
|
|
79
|
+
description: o("bankAccountForm.routingNumberDescription"),
|
|
80
|
+
validationMessages: {
|
|
81
|
+
REQUIRED: o("bankAccountForm.validations.routingNumber"),
|
|
82
|
+
INVALID_ROUTING_NUMBER: o("bankAccountForm.validations.routingNumber")
|
|
83
|
+
},
|
|
84
|
+
formHookResult: e
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
/* @__PURE__ */ t(
|
|
88
|
+
C,
|
|
89
|
+
{
|
|
90
|
+
label: o("bankAccountForm.accountNumberLabel"),
|
|
91
|
+
validationMessages: {
|
|
92
|
+
REQUIRED: o("bankAccountForm.validations.accountNumber"),
|
|
93
|
+
INVALID_ACCOUNT_NUMBER: o("bankAccountForm.validations.accountNumber")
|
|
94
|
+
},
|
|
95
|
+
formHookResult: e
|
|
96
|
+
}
|
|
97
|
+
),
|
|
98
|
+
/* @__PURE__ */ t(
|
|
99
|
+
T,
|
|
100
|
+
{
|
|
101
|
+
label: o("bankAccountForm.accountTypeLabel"),
|
|
102
|
+
getOptionLabel: (n) => o(n === "Checking" ? "bankAccountForm.accountTypeChecking" : "bankAccountForm.accountTypeSavings"),
|
|
103
|
+
formHookResult: e
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
] }),
|
|
107
|
+
/* @__PURE__ */ t(x, { children: /* @__PURE__ */ t(m.Button, { type: "submit", variant: "primary", isDisabled: k, children: o("continueCta") }) })
|
|
111
108
|
] }) }) }) });
|
|
112
109
|
}
|
|
113
110
|
export {
|
|
114
|
-
|
|
111
|
+
io as PaymentMethod
|
|
115
112
|
};
|
|
116
113
|
//# sourceMappingURL=PaymentMethod.js.map
|