@remoteoss/remote-flows 0.15.0 → 0.17.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 (134) hide show
  1. package/dist/{chunk-JJHGVDPO.js → chunk-3JTDGPXD.js} +2 -2
  2. package/dist/{chunk-LK4XMOCE.js → chunk-4W2RKQYM.js} +1 -1
  3. package/dist/chunk-4W2RKQYM.js.map +1 -0
  4. package/dist/chunk-4WCT2ZCS.js +2 -0
  5. package/dist/chunk-4WCT2ZCS.js.map +1 -0
  6. package/dist/{chunk-ZCYSBG7R.js → chunk-4YXQJD3M.js} +2 -2
  7. package/dist/{chunk-HBQDXOAG.js → chunk-4ZOKJJZC.js} +2 -2
  8. package/dist/chunk-5GYCZAL7.js +2 -0
  9. package/dist/chunk-5GYCZAL7.js.map +1 -0
  10. package/dist/chunk-6ZPISRAG.js +2 -0
  11. package/dist/chunk-6ZPISRAG.js.map +1 -0
  12. package/dist/{chunk-HAL2L237.js → chunk-AUZQY3AO.js} +2 -2
  13. package/dist/{chunk-N7QHEESE.js → chunk-BPK3J436.js} +2 -2
  14. package/dist/{chunk-KOPJY6WW.js → chunk-CNOIGOQQ.js} +2 -2
  15. package/dist/{chunk-F3BSJIHU.js → chunk-CWTERQ45.js} +2 -2
  16. package/dist/{chunk-GNXVMZY7.js → chunk-HWNHP6LW.js} +2 -2
  17. package/dist/{chunk-6YN2XQWR.js → chunk-I52TUBVO.js} +2 -2
  18. package/dist/{chunk-MYB6Y5FC.js → chunk-LWAS3Y4S.js} +2 -2
  19. package/dist/chunk-N7DP4HY4.js +2 -0
  20. package/dist/chunk-N7DP4HY4.js.map +1 -0
  21. package/dist/{chunk-XZRGLKXU.js → chunk-O4OZANFQ.js} +2 -2
  22. package/dist/chunk-O6SRXXVZ.js +2 -0
  23. package/dist/chunk-O6SRXXVZ.js.map +1 -0
  24. package/dist/{chunk-A3OEOVEH.js → chunk-R2UI3WAJ.js} +2 -2
  25. package/dist/chunk-R2UI3WAJ.js.map +1 -0
  26. package/dist/{chunk-JI5BE2MZ.js → chunk-R6JC4SUO.js} +2 -2
  27. package/dist/{chunk-776QJKX5.js → chunk-WQIPP2C3.js} +2 -2
  28. package/dist/{chunk-ZZOY6KD4.js → chunk-Z7CHDOVN.js} +2 -2
  29. package/dist/flows/ContractAmendment/ContractAmendmentConfirmationForm.d.ts +1 -1
  30. package/dist/flows/ContractAmendment/ContractAmendmentFlow.d.ts +1 -1
  31. package/dist/flows/ContractAmendment/ContractAmendmentFlow.js +1 -1
  32. package/dist/flows/ContractAmendment/ContractAmendmentForm.d.ts +1 -1
  33. package/dist/flows/ContractAmendment/ContractAmendmentForm.js +1 -1
  34. package/dist/flows/ContractAmendment/context.d.ts +2 -2
  35. package/dist/flows/ContractAmendment/hooks.d.ts +1 -1
  36. package/dist/flows/ContractAmendment/index.d.ts +1 -1
  37. package/dist/flows/ContractAmendment/index.js +1 -1
  38. package/dist/flows/ContractAmendment/utils.d.ts +1 -1
  39. package/dist/flows/CostCalculator/CostCalculatorFlow.d.ts +5 -1
  40. package/dist/flows/CostCalculator/CostCalculatorFlow.js +1 -1
  41. package/dist/flows/CostCalculator/CostCalculatorForm.d.ts +3 -3
  42. package/dist/flows/CostCalculator/CostCalculatorForm.js +1 -1
  43. package/dist/flows/CostCalculator/EstimationResults/EstimationResults.d.ts +6 -2
  44. package/dist/flows/CostCalculator/EstimationResults/EstimationResults.js +1 -1
  45. package/dist/flows/CostCalculator/Results/CostCalculatorResults.d.ts +1 -1
  46. package/dist/flows/CostCalculator/SummaryResults/SummaryResults.d.ts +6 -2
  47. package/dist/flows/CostCalculator/SummaryResults/SummaryResults.js +1 -1
  48. package/dist/flows/CostCalculator/api.d.ts +1 -1
  49. package/dist/flows/CostCalculator/components/SalaryField.d.ts +2 -2
  50. package/dist/flows/CostCalculator/context.d.ts +2 -2
  51. package/dist/flows/CostCalculator/hooks.d.ts +1 -1
  52. package/dist/flows/CostCalculator/hooks.js +1 -1
  53. package/dist/flows/CostCalculator/index.d.ts +2 -2
  54. package/dist/flows/CostCalculator/index.js +1 -1
  55. package/dist/flows/CostCalculator/jsonSchema.d.ts +38 -0
  56. package/dist/flows/CostCalculator/jsonSchema.js +1 -1
  57. package/dist/flows/CostCalculator/types.d.ts +26 -3
  58. package/dist/flows/CostCalculator/utils.d.ts +3 -3
  59. package/dist/flows/CostCalculator/utils.js +1 -1
  60. package/dist/flows/Onboarding/OnboardingFlow.d.ts +2 -2
  61. package/dist/flows/Onboarding/OnboardingFlow.js +1 -1
  62. package/dist/flows/Onboarding/api.d.ts +2 -2
  63. package/dist/flows/Onboarding/components/AnnualGrossSalary.d.ts +2 -2
  64. package/dist/flows/Onboarding/components/BasicInformationStep.d.ts +1 -1
  65. package/dist/flows/Onboarding/components/BasicInformationStep.js +1 -1
  66. package/dist/flows/Onboarding/components/BenefitsStep.d.ts +2 -2
  67. package/dist/flows/Onboarding/components/BenefitsStep.js +1 -1
  68. package/dist/flows/Onboarding/components/ContractDetailsStep.d.ts +1 -1
  69. package/dist/flows/Onboarding/components/ContractDetailsStep.js +1 -1
  70. package/dist/flows/Onboarding/components/OnboardingForm.d.ts +2 -2
  71. package/dist/flows/Onboarding/components/OnboardingForm.js +1 -1
  72. package/dist/flows/Onboarding/components/OnboardingInvite.d.ts +1 -1
  73. package/dist/flows/Onboarding/components/ReviewStep.d.ts +1 -1
  74. package/dist/flows/Onboarding/components/SelectCountryStep.d.ts +1 -1
  75. package/dist/flows/Onboarding/components/SelectCountryStep.js +1 -1
  76. package/dist/flows/Onboarding/context.d.ts +2 -2
  77. package/dist/flows/Onboarding/hooks.d.ts +2 -2
  78. package/dist/flows/Onboarding/index.d.ts +2 -2
  79. package/dist/flows/Onboarding/index.js +1 -1
  80. package/dist/flows/Onboarding/types.d.ts +1 -1
  81. package/dist/flows/Onboarding/utils.d.ts +1 -1
  82. package/dist/flows/Termination/AdditionalDetailsForm.d.ts +1 -1
  83. package/dist/flows/Termination/AdditionalDetailsForm.js +1 -1
  84. package/dist/flows/Termination/EmployeeComunicationForm.d.ts +1 -1
  85. package/dist/flows/Termination/EmployeeComunicationForm.js +1 -1
  86. package/dist/flows/Termination/PaidTimeOffForm.d.ts +1 -1
  87. package/dist/flows/Termination/PaidTimeOffForm.js +1 -1
  88. package/dist/flows/Termination/TerminationDetailsForm.d.ts +1 -1
  89. package/dist/flows/Termination/TerminationDetailsForm.js +1 -1
  90. package/dist/flows/Termination/TerminationFlow.d.ts +1 -1
  91. package/dist/flows/Termination/TerminationFlow.js +1 -1
  92. package/dist/flows/Termination/TerminationForm.d.ts +1 -1
  93. package/dist/flows/Termination/TerminationForm.js +1 -1
  94. package/dist/flows/Termination/TimeOff.d.ts +1 -1
  95. package/dist/flows/Termination/context.d.ts +2 -2
  96. package/dist/flows/Termination/hooks.d.ts +1 -1
  97. package/dist/flows/Termination/index.d.ts +1 -1
  98. package/dist/flows/Termination/index.js +1 -1
  99. package/dist/flows/Termination/types.d.ts +1 -1
  100. package/dist/index.css +1 -1
  101. package/dist/index.css.map +1 -1
  102. package/dist/index.d.ts +5 -5
  103. package/dist/index.js +1 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/internals.d.ts +1 -1
  106. package/dist/{remoteFlows-Clat4nYN.d.ts → remoteFlows-CBNrcwGZ.d.ts} +2 -1
  107. package/dist/{types.gen-C9Y1S1pc.d.ts → types.gen-CaXCWhlP.d.ts} +1 -1
  108. package/package.json +2 -2
  109. package/dist/chunk-6YKL7EOK.js +0 -2
  110. package/dist/chunk-6YKL7EOK.js.map +0 -1
  111. package/dist/chunk-A3OEOVEH.js.map +0 -1
  112. package/dist/chunk-HSIQ2OHT.js +0 -2
  113. package/dist/chunk-HSIQ2OHT.js.map +0 -1
  114. package/dist/chunk-LK4XMOCE.js.map +0 -1
  115. package/dist/chunk-NVQBJCNL.js +0 -2
  116. package/dist/chunk-NVQBJCNL.js.map +0 -1
  117. package/dist/chunk-OC7VOBB4.js +0 -2
  118. package/dist/chunk-OC7VOBB4.js.map +0 -1
  119. package/dist/chunk-SIUODCGO.js +0 -2
  120. package/dist/chunk-SIUODCGO.js.map +0 -1
  121. /package/dist/{chunk-JJHGVDPO.js.map → chunk-3JTDGPXD.js.map} +0 -0
  122. /package/dist/{chunk-ZCYSBG7R.js.map → chunk-4YXQJD3M.js.map} +0 -0
  123. /package/dist/{chunk-HBQDXOAG.js.map → chunk-4ZOKJJZC.js.map} +0 -0
  124. /package/dist/{chunk-HAL2L237.js.map → chunk-AUZQY3AO.js.map} +0 -0
  125. /package/dist/{chunk-N7QHEESE.js.map → chunk-BPK3J436.js.map} +0 -0
  126. /package/dist/{chunk-KOPJY6WW.js.map → chunk-CNOIGOQQ.js.map} +0 -0
  127. /package/dist/{chunk-F3BSJIHU.js.map → chunk-CWTERQ45.js.map} +0 -0
  128. /package/dist/{chunk-GNXVMZY7.js.map → chunk-HWNHP6LW.js.map} +0 -0
  129. /package/dist/{chunk-6YN2XQWR.js.map → chunk-I52TUBVO.js.map} +0 -0
  130. /package/dist/{chunk-MYB6Y5FC.js.map → chunk-LWAS3Y4S.js.map} +0 -0
  131. /package/dist/{chunk-XZRGLKXU.js.map → chunk-O4OZANFQ.js.map} +0 -0
  132. /package/dist/{chunk-JI5BE2MZ.js.map → chunk-R6JC4SUO.js.map} +0 -0
  133. /package/dist/{chunk-776QJKX5.js.map → chunk-WQIPP2C3.js.map} +0 -0
  134. /package/dist/{chunk-ZZOY6KD4.js.map → chunk-Z7CHDOVN.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/flows/CostCalculator/utils.ts","../src/flows/CostCalculator/hooks.tsx"],"sourcesContent":["import type {\n CostCalculatorEmploymentParam,\n CostCalculatorEstimateParams,\n} from '@/src/client';\n\nimport { $TSFixMe } from '@/src/types/remoteFlows';\nimport { AnyObjectSchema, number, object } from 'yup';\nimport { CostCalculatorVersion, defaultEstimationOptions } from './hooks';\nimport type {\n CostCalculatorEstimationOptions,\n CostCalculatorEstimationSubmitValues,\n CurrencyKey,\n} from './types';\nimport { BASE_RATES } from '@/src/flows/CostCalculator/constants';\n\n/**\n * Build the validation schema for the form.\n * @returns\n */\nexport function buildValidationSchema(\n fields: $TSFixMe[],\n employerBillingCurrency: string,\n) {\n const fieldsSchema = fields.reduce<Record<string, AnyObjectSchema>>(\n (fieldsSchemaAcc, field) => {\n // Special handling for salary fields\n if (field.name === 'salary' || field.name === 'salary_conversion') {\n fieldsSchemaAcc[field.name] = (field.schema as AnyObjectSchema).when(\n 'salary_converted',\n {\n is: (val: string | null) => val === field.name,\n then: (schema) => schema.required('Salary is required'),\n otherwise: (schema) => schema.optional(),\n },\n );\n } else if (field.name === 'management') {\n fieldsSchemaAcc[field.name] = object({\n management_fee: number()\n .transform((value) => {\n return isNaN(value) ? undefined : value;\n })\n .min(0, 'Management fee must be greater than or equal to 0')\n .max(\n employerBillingCurrency\n ? BASE_RATES[employerBillingCurrency as CurrencyKey]\n : BASE_RATES.USD,\n () => {\n const maxValue = employerBillingCurrency\n ? BASE_RATES[employerBillingCurrency as CurrencyKey]\n : BASE_RATES.USD;\n const displayValue = maxValue / 100;\n return `Management fee cannot exceed ${displayValue} ${employerBillingCurrency}`;\n },\n ),\n });\n } else {\n fieldsSchemaAcc[field.name] = field.schema as AnyObjectSchema;\n }\n return fieldsSchemaAcc;\n },\n {},\n );\n return object(fieldsSchema) as AnyObjectSchema;\n}\n\n/**\n * Format the benefits to the expected format by the API.\n * @param benefits\n * @returns\n */\nfunction formatBenefits(benefits: Record<string, string>) {\n const needle = 'benefit-';\n return Object.keys(benefits).reduce<\n Array<{ benefit_group_slug: string; benefit_tier_slug: string }>\n >((acc, key) => {\n const benefitTierSlug = benefits[key];\n if (benefitTierSlug === 'none') {\n return acc;\n }\n const benefitGroupSlug = key.replace(needle, '');\n const benefitEntry = {\n benefit_group_slug: benefitGroupSlug,\n benefit_tier_slug: benefitTierSlug,\n };\n return [...acc, benefitEntry];\n }, []);\n}\n\nfunction mapValueToEmployment(\n value: CostCalculatorEstimationSubmitValues,\n estimationOptions: CostCalculatorEstimationOptions,\n version: CostCalculatorVersion,\n): CostCalculatorEmploymentParam {\n return {\n region_slug: value.region || value.country,\n employment_term: value.contract_duration_type ?? 'fixed',\n title: estimationOptions.title,\n age: value.age ?? undefined,\n ...(value.benefits && { benefits: formatBenefits(value.benefits) }),\n ...((version == 'marketing' ||\n value.salary_converted === 'salary_conversion') && {\n annual_gross_salary_in_employer_currency: value.salary,\n }),\n ...(version === 'standard' &&\n value.salary_converted === 'salary' && {\n annual_gross_salary: value.salary,\n }),\n };\n}\n\n/**\n * Build the payload for the cost calculator estimation.\n * @param values\n * @param estimationOptions\n * @returns\n */\nexport function buildPayload(\n values:\n | CostCalculatorEstimationSubmitValues\n | CostCalculatorEstimationSubmitValues[],\n estimationOptions: CostCalculatorEstimationOptions = defaultEstimationOptions,\n version: CostCalculatorVersion = 'standard',\n): CostCalculatorEstimateParams {\n const employments = Array.isArray(values) ? values : [values];\n\n if (employments.length === 0) {\n throw new Error('At least one employment value is required');\n }\n\n if (employments.length > 1) {\n const currencies = new Set(employments.map((v) => v.currency));\n if (currencies.size > 1) {\n console.warn(\n 'Multiple currencies detected in array. Using currency from first employment.',\n );\n }\n }\n\n const managementFee = Number(employments[0].management?.management_fee);\n\n return {\n employer_currency_slug: employments[0].currency,\n include_benefits: estimationOptions.includeBenefits,\n include_cost_breakdowns: estimationOptions.includeCostBreakdowns,\n include_premium_benefits: estimationOptions.includePremiumBenefits,\n include_management_fee: estimationOptions.includeManagementFee,\n ...(estimationOptions.includeManagementFee &&\n managementFee && {\n global_discount: {\n quoted_amount: managementFee,\n text: '',\n },\n }),\n employments: employments.map((value) =>\n mapValueToEmployment(value, estimationOptions, version),\n ),\n };\n}\n","import {\n CostCalculatorEstimateResponse,\n MinimalRegion,\n PostCreateEstimationError,\n} from '@/src/client';\nimport { jsonSchema } from '@/src/flows/CostCalculator/jsonSchema';\nimport type {\n CostCalculatorEstimationFormValues,\n CostCalculatorEstimationOptions,\n CostCalculatorEstimationSubmitValues,\n EstimationError,\n UseCostCalculatorOptions,\n} from '@/src/flows/CostCalculator/types';\nimport type { JSFModify, Result } from '@/src/flows/types';\n\nimport { parseJSFToValidate } from '@/src/components/form/utils';\nimport { iterateErrors } from '@/src/components/form/yupValidationResolver';\nimport { createHeadlessForm, modify } from '@remoteoss/json-schema-form';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { string, ValidationError } from 'yup';\nimport { buildPayload, buildValidationSchema } from './utils';\nimport {\n useCompanyCurrencies,\n useCostCalculatorCountries,\n useCostCalculatorEstimation,\n useRegionFields,\n} from '@/src/flows/CostCalculator/api';\nimport { $TSFixMe, JSFField } from '@/src/types/remoteFlows';\nimport { SalaryField } from '@/src/flows/CostCalculator/components/SalaryField';\n\nexport type CostCalculatorVersion = 'standard' | 'marketing';\n\ntype CostCalculatorCountry = {\n value: string;\n label: string;\n childRegions: MinimalRegion[];\n hasAdditionalFields: boolean | undefined;\n regionSlug: string;\n currency: string;\n};\n\ntype JSFValidationError = {\n formErrors: Record<\n string,\n {\n type: string;\n message: string;\n }\n >;\n yupError: ValidationError;\n};\n\nexport const defaultEstimationOptions: CostCalculatorEstimationOptions = {\n title: 'Estimation',\n includeBenefits: false,\n includeCostBreakdowns: false,\n includePremiumBenefits: false,\n enableCurrencyConversion: false,\n includeManagementFee: false,\n};\n\ntype UseCostCalculatorParams = {\n /**\n * The default region slug to preselect a country and a region.\n */\n defaultRegion?: string;\n /**\n * The default currency slug to preselect a currency.\n */\n defaultCurrency?: string;\n\n /**\n * The default salary to preselect a salary.\n */\n defaultSalary?: string;\n /**\n * The estimation options.\n */\n estimationOptions: CostCalculatorEstimationOptions;\n options?: UseCostCalculatorOptions;\n version?: CostCalculatorVersion;\n};\n\nconst useStaticSchema = (options?: { jsfModify?: JSFModify }) => {\n const { schema: jsonSchemaModified } = modify(\n jsonSchema.data.schema,\n options?.jsfModify || {},\n );\n\n return createHeadlessForm(jsonSchemaModified);\n};\n\n/**\n * Hook to use the cost calculator.\n */\nexport const useCostCalculator = (\n {\n defaultRegion,\n defaultCurrency,\n defaultSalary,\n estimationOptions,\n options,\n version,\n }: UseCostCalculatorParams = {\n estimationOptions: defaultEstimationOptions,\n },\n) => {\n const [selectedRegion, setSelectedRegion] = useState<string | undefined>(\n defaultRegion,\n );\n const [selectedCountry, setSelectedCountry] =\n useState<CostCalculatorCountry>();\n const [employerBillingCurrency, setEmployerBillingCurrency] = useState<\n string | undefined\n >();\n const { data: countries, isLoading: isLoadingCountries } =\n useCostCalculatorCountries({\n includePremiumBenefits: estimationOptions.includePremiumBenefits,\n });\n const { data: currencies, isLoading: isLoadingCurrencies } =\n useCompanyCurrencies();\n\n const jsonSchemaRegionSlug = selectedRegion || selectedCountry?.value;\n\n const { data: jsonSchemaRegionFields, isLoading: isLoadingRegionFields } =\n useRegionFields(jsonSchemaRegionSlug, {\n includePremiumBenefits: estimationOptions.includePremiumBenefits,\n options,\n });\n const costCalculatorEstimationMutation = useCostCalculatorEstimation();\n const employeeBillingCurrency = selectedCountry?.currency;\n\n const salaryField = options?.jsfModify?.fields?.salary;\n const salaryFieldPresentation =\n salaryField &&\n typeof salaryField === 'object' &&\n 'presentation' in salaryField\n ? (\n salaryField as {\n presentation?: {\n salary_conversion_properties?: {\n label?: string;\n description?: string;\n };\n };\n }\n ).presentation\n : undefined;\n\n const getCurrencies = useCallback(() => {\n const shouldSwapOrder =\n employeeBillingCurrency && employerBillingCurrency\n ? employeeBillingCurrency !== employerBillingCurrency\n : false;\n\n if (employeeBillingCurrency !== employerBillingCurrency) {\n return {\n from: employerBillingCurrency,\n to: employeeBillingCurrency,\n shouldSwapOrder,\n };\n }\n\n return {\n from: employeeBillingCurrency,\n to: employerBillingCurrency,\n shouldSwapOrder,\n };\n }, [employeeBillingCurrency, employerBillingCurrency]);\n\n const showManagementField = estimationOptions.includeManagementFee;\n const customFields = useMemo(() => {\n const { from, to, shouldSwapOrder } = getCurrencies();\n\n return {\n fields: {\n salary: {\n ...salaryField,\n presentation: {\n salary_conversion_properties: {\n label:\n salaryFieldPresentation?.salary_conversion_properties?.label,\n description:\n salaryFieldPresentation?.salary_conversion_properties\n ?.description,\n },\n currencies: { from, to },\n Component: (\n props: JSFField & { currencies: { from: string; to: string } },\n ) => {\n return (\n <SalaryField\n {...props}\n shouldSwapOrder={shouldSwapOrder}\n conversionType={\n version === 'marketing' ? 'no_spread' : 'spread'\n }\n defaultValue={defaultSalary}\n />\n );\n },\n },\n },\n management: {\n ...options?.jsfModify?.fields?.management,\n properties: {\n ...(options?.jsfModify?.fields?.management as $TSFixMe)?.properties,\n management_fee: {\n ...(options?.jsfModify?.fields?.management as $TSFixMe)\n ?.properties?.management_fee,\n 'x-jsf-presentation': {\n inputType: 'money',\n additionalProps: {\n currency: employerBillingCurrency || 'USD',\n },\n },\n },\n },\n presentation: {\n ...(typeof options?.jsfModify?.fields?.management === 'object'\n ? (\n options?.jsfModify?.fields?.management as Record<\n string,\n $TSFixMe\n >\n )['x-jsf-presentation']\n : {}),\n hidden: !showManagementField,\n },\n },\n },\n };\n }, [\n employerBillingCurrency,\n salaryField,\n salaryFieldPresentation?.salary_conversion_properties?.description,\n salaryFieldPresentation?.salary_conversion_properties?.label,\n defaultSalary,\n getCurrencies,\n options?.jsfModify?.fields?.management,\n showManagementField,\n version,\n ]);\n\n const fieldsJSONSchema = useStaticSchema({\n jsfModify: {\n fields: {\n ...options?.jsfModify?.fields,\n ...customFields?.fields,\n },\n },\n });\n\n useEffect(() => {\n // Initialize selectedCountry from defaultRegion\n if (defaultRegion && countries) {\n const defaultCountry = countries.find(\n ({ value }) => value === defaultRegion,\n );\n if (defaultCountry) {\n setSelectedCountry(defaultCountry);\n }\n }\n }, [defaultRegion, countries]);\n\n useEffect(() => {\n // Initialize selectedCurrency from defaultCurrency\n if (defaultCurrency && currencies) {\n const defaultCurrencyObj = currencies.find(\n ({ value }) => value === defaultCurrency,\n );\n if (defaultCurrencyObj) {\n setEmployerBillingCurrency(defaultCurrencyObj.label);\n }\n }\n }, [defaultCurrency, currencies]);\n\n /**\n * Submit the estimation form with the given values.\n * @param values\n */\n async function onSubmit(\n values: CostCalculatorEstimationSubmitValues,\n ): Promise<Result<CostCalculatorEstimateResponse, EstimationError>> {\n try {\n await validationSchema.validate(values, { abortEarly: false });\n } catch (err) {\n return {\n data: null,\n error: err as ValidationError,\n };\n }\n\n return new Promise((resolve, reject) => {\n costCalculatorEstimationMutation.mutate(\n buildPayload(values, estimationOptions, version),\n {\n onSuccess: (response) => {\n if (response.data) {\n resolve({\n data: response.data,\n error: null,\n });\n } else {\n resolve({\n data: null,\n error: new Error(\n 'Something went wrong. Please try again later.',\n ),\n });\n }\n },\n onError: (error) => {\n reject({\n data: null,\n error: error as PostCreateEstimationError,\n });\n },\n },\n );\n });\n }\n\n /**\n * If the selected country has no child regions and has additional fields,\n * set the current region to the country's region slug and fetch the region fields.\n * @param country\n */\n function onCountryChange(country: string) {\n const currentCountry = countries?.find(({ value }) => value === country);\n\n if (\n currentCountry &&\n currentCountry.childRegions.length === 0 &&\n currentCountry.hasAdditionalFields\n ) {\n setSelectedRegion(currentCountry.regionSlug);\n } else {\n setSelectedRegion(undefined);\n }\n setSelectedCountry(currentCountry);\n }\n\n /**\n * Update the selected region and fetch the region fields.\n * @param region\n */\n function onRegionChange(region: string) {\n setSelectedRegion(region);\n }\n\n function onChangeCurrency(currency: string) {\n const selectedCurrency = currencies?.find(\n (c) => c.value === currency,\n )?.label;\n setEmployerBillingCurrency(selectedCurrency);\n options?.onCurrencyChange?.(selectedCurrency || '');\n }\n\n const regionField = fieldsJSONSchema.fields.find(\n (field) => field.name === 'region',\n );\n\n if (regionField) {\n const regions =\n selectedCountry?.childRegions.map((region) => ({\n value: region.slug,\n label: region.name,\n })) ?? [];\n regionField.options = regions;\n regionField.isVisible = regions.length > 0;\n regionField.required = regions.length > 0;\n regionField.onChange = onRegionChange;\n regionField.schema =\n regions.length > 0\n ? string()\n .transform((value) => (typeof value === 'string' ? value : ''))\n .required('Region is required')\n : string();\n }\n\n if (currencies) {\n const currencyField = fieldsJSONSchema.fields.find(\n (field) => field.name === 'currency',\n );\n if (currencyField) {\n currencyField.options = currencies;\n currencyField.onChange = onChangeCurrency;\n }\n }\n\n if (countries) {\n const countryField = fieldsJSONSchema.fields.find(\n (field) => field.name === 'country',\n );\n if (countryField) {\n countryField.options = countries;\n countryField.onChange = onCountryChange;\n }\n }\n\n const resetForm = () => {\n setSelectedCountry(undefined);\n setSelectedRegion(defaultRegion);\n };\n\n const allFields = [\n ...fieldsJSONSchema.fields.filter((field) => field.name !== 'management'),\n ...(jsonSchemaRegionFields?.fields || []),\n ...fieldsJSONSchema.fields.filter((field) => field.name === 'management'),\n ];\n\n const validationSchema = buildValidationSchema(\n fieldsJSONSchema.fields,\n employerBillingCurrency || 'USD',\n );\n\n async function handleValidation(values: CostCalculatorEstimationFormValues) {\n let errors: JSFValidationError | null = null;\n const parsedValues = parseJSFToValidate(values, allFields);\n\n // 1. validate static fields first using Yup validate function\n try {\n await validationSchema.validate(parsedValues, {\n abortEarly: false,\n });\n errors = {\n formErrors: {},\n yupError: new ValidationError([], values),\n };\n } catch (error) {\n const iterateResult = iterateErrors(error as ValidationError);\n\n errors = {\n // convert the errors to a format that can be used in the form\n formErrors: Object.entries(iterateResult).reduce(\n (acc, [key, value]) => ({ ...acc, [key]: value.message }),\n {},\n ),\n yupError: error as ValidationError,\n };\n }\n\n // 2. validate json schema fields using the handleValidation (from json-schema-form)\n const handleValidationResult =\n jsonSchemaRegionFields?.handleValidation(parsedValues);\n\n // 3. combine the errors from both validations\n const combinedInnerErrors = [\n ...(errors?.yupError.inner || []),\n ...(handleValidationResult?.yupError?.inner || []),\n ];\n const combinedValues = {\n ...(errors?.yupError?.value || {}),\n ...(handleValidationResult?.yupError?.value || {}),\n };\n\n return {\n formErrors: {\n ...(errors?.formErrors || {}),\n ...(handleValidationResult?.formErrors || {}),\n },\n yupError: new ValidationError(combinedInnerErrors, combinedValues),\n };\n }\n\n return {\n /**\n * Current step state containing the current step and total number of steps\n */\n stepState: {\n current: 0,\n total: 1,\n isLastStep: true,\n },\n /**\n * Array of form fields from the cost calculator schema + dynamic region fields like benefits, age, etc.\n */\n fields: allFields,\n /**\n * Validation schema for the cost calculator form\n */\n validationSchema,\n /**\n * Function to parse form values before submission\n * @param values - Form values to parse\n * @returns Parsed form values\n */\n parseFormValues: (\n values: CostCalculatorEstimationFormValues,\n ): CostCalculatorEstimationSubmitValues => {\n const {\n country,\n region,\n currency,\n salary_converted,\n salary_conversion,\n management,\n ...rest\n } = values;\n\n // If the salary has been converted, we take the one the user has inputted\n let salary = values.salary;\n if (salary_converted === 'salary_conversion') {\n salary = salary_conversion;\n }\n\n const jsonSchemaStaticFieldValues = {\n country,\n region,\n salary,\n salary_converted,\n salary_conversion,\n currency,\n management,\n };\n\n const parsedStaticFields = parseJSFToValidate(\n jsonSchemaStaticFieldValues,\n fieldsJSONSchema.fields,\n );\n\n const parsedRegionFields = parseJSFToValidate(\n rest,\n jsonSchemaRegionFields?.fields || [],\n );\n\n return {\n ...parsedStaticFields,\n ...parsedRegionFields,\n } as CostCalculatorEstimationSubmitValues;\n },\n /**\n * Function to handle validation of the cost calculator form\n * @param values - Form values to validate\n * @returns Validation result\n */\n handleValidation,\n /**\n * Whether the cost calculator form is currently being submitted\n */\n isSubmitting: costCalculatorEstimationMutation.isPending,\n /**\n * Whether the cost calculator form is currently loading\n */\n isLoading:\n isLoadingCountries && isLoadingCurrencies && isLoadingRegionFields,\n /**\n * Function to submit the cost calculator form\n */\n onSubmit,\n /**\n * Function to reset the cost calculator form\n */\n resetForm,\n\n /**\n * Currencies data useful to get the currency if you have a currencySlug\n */\n currencies,\n };\n};\n"],"mappings":"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","names":["number","object","createHeadlessForm","modify","useCallback","useEffect","useMemo","useState","string","ValidationError","jsx","defaultEstimationOptions","useStaticSchema","__name","options","jsonSchemaModified","modify","jsonSchema","createHeadlessForm","useCostCalculator","defaultRegion","defaultCurrency","defaultSalary","estimationOptions","version","selectedRegion","setSelectedRegion","useState","selectedCountry","setSelectedCountry","employerBillingCurrency","setEmployerBillingCurrency","countries","isLoadingCountries","useCostCalculatorCountries","currencies","isLoadingCurrencies","useCompanyCurrencies","jsonSchemaRegionSlug","jsonSchemaRegionFields","isLoadingRegionFields","useRegionFields","costCalculatorEstimationMutation","useCostCalculatorEstimation","employeeBillingCurrency","salaryField","salaryFieldPresentation","getCurrencies","useCallback","shouldSwapOrder","showManagementField","customFields","useMemo","from","to","props","SalaryField","fieldsJSONSchema","useEffect","defaultCountry","value","defaultCurrencyObj","onSubmit","values","validationSchema","err","resolve","reject","buildPayload","response","error","onCountryChange","country","currentCountry","onRegionChange","region","onChangeCurrency","currency","selectedCurrency","regionField","field","regions","string","currencyField","countryField","resetForm","allFields","buildValidationSchema","handleValidation","errors","parsedValues","parseJSFToValidate","ValidationError","iterateResult","iterateErrors","acc","key","handleValidationResult","combinedInnerErrors","combinedValues","salary_converted","salary_conversion","management","rest","salary","parsedStaticFields","parsedRegionFields","buildValidationSchema","fields","employerBillingCurrency","fieldsSchema","fieldsSchemaAcc","field","__name","val","schema","object","number","value","BASE_RATES","formatBenefits","benefits","needle","acc","key","benefitTierSlug","benefitEntry","mapValueToEmployment","estimationOptions","version","buildPayload","values","defaultEstimationOptions","employments","v","managementFee"]}
@@ -1,2 +0,0 @@
1
- import{c as f,d}from"./chunk-OC7VOBB4.js";import{a as s}from"./chunk-HN5HLFTB.js";import{a as m}from"./chunk-KSHK3ZPX.js";import{b as i}from"./chunk-CFIJKJXD.js";import{f as g}from"./chunk-3BREUYLG.js";import{a as c}from"./chunk-P37U34EQ.js";import{useEffect as E,useId as P,useState as _}from"react";import{jsx as h}from"react/jsx-runtime";var y=c((r,e,t)=>t&&t[e]?t[e]:r[e]?r[e]/100:0,"getDefaultManagementFee"),T=c(({estimationOptions:r=f,defaultValues:e={countryRegionSlug:"",currencySlug:"",salary:"",benefits:{}},options:t,render:S,version:p="standard"})=>{let F=P(),[R,C]=_("USD"),v=c(u=>{C(u);let o=y(s,u,r.managementFees);o&&a.setValue("management.management_fee",o)},"onCurrencyChange"),n=d({defaultRegion:e.countryRegionSlug,defaultCurrency:e.currencySlug,defaultSalary:e.salary,estimationOptions:r,version:p,options:{...t,onCurrencyChange:v}}),K=i(n.handleValidation),b=e.currencySlug?"":y(s,R,r.managementFees),a=g({resolver:K,defaultValues:{country:e?.countryRegionSlug,currency:e?.currencySlug,region:"",salary:e?.salary,salary_conversion:"",salary_converted:"",management:{management_fee:b},benefits:e?.benefits},shouldUnregister:!1,mode:"onBlur"});return E(()=>{if(e.currencySlug&&n.currencies&&r.includeManagementFee){let o=n.currencies.find(l=>l.value===e.currencySlug)?.label;if(o){C(o);let l=y(s,o,r.managementFees);a.setValue("management.management_fee",l)}}},[e.currencySlug,n.currencies,r.includeManagementFee,r.managementFees,a]),h(m.Provider,{value:{form:a,formId:F,costCalculatorBag:n},children:S(n)})},"CostCalculatorFlow");export{T as a};
2
- //# sourceMappingURL=chunk-SIUODCGO.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/flows/CostCalculator/CostCalculatorFlow.tsx"],"sourcesContent":["import React, { useEffect, useId, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useJsonSchemasValidationFormResolver } from '@/src/components/form/yupValidationResolver';\nimport { CostCalculatorContext } from '@/src/flows/CostCalculator/context';\nimport {\n CostCalculatorVersion,\n defaultEstimationOptions,\n useCostCalculator,\n} from '@/src/flows/CostCalculator/hooks';\nimport {\n CostCalculatorEstimationOptions,\n CurrencyKey,\n UseCostCalculatorOptions,\n} from '@/src/flows/CostCalculator/types';\nimport { BASE_RATES } from '@/src/flows/CostCalculator/constants';\n\nexport type CostCalculatorFlowProps = {\n /**\n * Estimation params allows you to customize the parameters sent to the /cost-calculator/estimation endpoint.\n */\n estimationOptions?: CostCalculatorEstimationOptions;\n /**\n * Default values for the form fields.\n */\n defaultValues?: Partial<{\n /**\n * Default value for the country field.\n */\n countryRegionSlug: string;\n /**\n * Default value for the currency field.\n */\n currencySlug: string;\n /**\n * Default value for the salary field.\n */\n salary: string;\n /**\n * Default value for the benefits field.\n */\n benefits: Record<string, string>;\n }>;\n options?: UseCostCalculatorOptions;\n render: (\n costCalculatorBag: ReturnType<typeof useCostCalculator>,\n ) => React.ReactNode;\n /**\n * Whether to include annual_gross_salary in the estimation payload\n */\n version?: CostCalculatorVersion;\n};\n\nconst getDefaultManagementFee = (\n baseRates: Record<CurrencyKey, number>,\n currency: CurrencyKey,\n managementFees?: Partial<Record<CurrencyKey, number>>,\n) => {\n if (managementFees && managementFees[currency]) {\n return managementFees[currency];\n }\n if (baseRates[currency]) {\n return baseRates[currency] / 100;\n }\n return 0;\n};\n\nexport const CostCalculatorFlow = ({\n estimationOptions = defaultEstimationOptions,\n defaultValues = {\n countryRegionSlug: '',\n currencySlug: '',\n salary: '',\n benefits: {},\n },\n options,\n render,\n version = 'standard',\n}: CostCalculatorFlowProps) => {\n const formId = useId();\n const [currency, setCurrency] = useState<CurrencyKey>('USD');\n const onCurrencyChange = (currency: string) => {\n setCurrency(currency as CurrencyKey);\n const managementFee = getDefaultManagementFee(\n BASE_RATES,\n currency as CurrencyKey,\n estimationOptions.managementFees,\n );\n if (managementFee) {\n form.setValue('management.management_fee', managementFee);\n }\n };\n const costCalculatorBag = useCostCalculator({\n defaultRegion: defaultValues.countryRegionSlug,\n defaultCurrency: defaultValues.currencySlug,\n defaultSalary: defaultValues.salary,\n estimationOptions,\n version,\n options: {\n ...options,\n onCurrencyChange: onCurrencyChange,\n },\n });\n const resolver = useJsonSchemasValidationFormResolver(\n // @ts-expect-error no matching type\n costCalculatorBag.handleValidation,\n );\n\n const defaultManagementFee = defaultValues.currencySlug\n ? ''\n : getDefaultManagementFee(\n BASE_RATES,\n currency,\n estimationOptions.managementFees,\n );\n\n const form = useForm({\n resolver,\n defaultValues: {\n country: defaultValues?.countryRegionSlug,\n currency: defaultValues?.currencySlug,\n region: '',\n salary: defaultValues?.salary,\n salary_conversion: '',\n salary_converted: '',\n management: {\n management_fee: defaultManagementFee,\n },\n benefits: defaultValues?.benefits,\n },\n shouldUnregister: false,\n mode: 'onBlur',\n });\n\n useEffect(() => {\n if (\n defaultValues.currencySlug &&\n costCalculatorBag.currencies &&\n estimationOptions.includeManagementFee\n ) {\n const currencyData = costCalculatorBag.currencies.find(\n (currency) => currency.value === defaultValues.currencySlug,\n );\n const currencyCode = currencyData?.label;\n if (currencyCode) {\n setCurrency(currencyCode as CurrencyKey);\n const defaultManagementFee = getDefaultManagementFee(\n BASE_RATES,\n currencyCode as CurrencyKey,\n estimationOptions.managementFees,\n );\n form.setValue('management.management_fee', defaultManagementFee);\n }\n }\n }, [\n defaultValues.currencySlug,\n costCalculatorBag.currencies,\n estimationOptions.includeManagementFee,\n estimationOptions.managementFees,\n form,\n ]);\n\n return (\n <CostCalculatorContext.Provider\n value={{\n form,\n formId: formId,\n costCalculatorBag,\n }}\n >\n {render(costCalculatorBag)}\n </CostCalculatorContext.Provider>\n );\n};\n"],"mappings":"kPAAA,OAAgB,aAAAA,EAAW,SAAAC,EAAO,YAAAC,MAAgB,QAkK9C,cAAAC,MAAA,oBA9GJ,IAAMC,EAA0BC,EAAA,CAC9BC,EACAC,EACAC,IAEIA,GAAkBA,EAAeD,CAAQ,EACpCC,EAAeD,CAAQ,EAE5BD,EAAUC,CAAQ,EACbD,EAAUC,CAAQ,EAAI,IAExB,EAXuB,2BAcnBE,EAAqBJ,EAAA,CAAC,CACjC,kBAAAK,EAAoBC,EACpB,cAAAC,EAAgB,CACd,kBAAmB,GACnB,aAAc,GACd,OAAQ,GACR,SAAU,CAAC,CACb,EACA,QAAAC,EACA,OAAAC,EACA,QAAAC,EAAU,UACZ,IAA+B,CAC7B,IAAMC,EAASC,EAAM,EACf,CAACV,EAAUW,CAAW,EAAIC,EAAsB,KAAK,EACrDC,EAAmBf,EAACE,GAAqB,CAC7CW,EAAYX,CAAuB,EACnC,IAAMc,EAAgBjB,EACpBkB,EACAf,EACAG,EAAkB,cACpB,EACIW,GACFE,EAAK,SAAS,4BAA6BF,CAAa,CAE5D,EAVyB,oBAWnBG,EAAoBC,EAAkB,CAC1C,cAAeb,EAAc,kBAC7B,gBAAiBA,EAAc,aAC/B,cAAeA,EAAc,OAC7B,kBAAAF,EACA,QAAAK,EACA,QAAS,CACP,GAAGF,EACH,iBAAkBO,CACpB,CACF,CAAC,EACKM,EAAWC,EAEfH,EAAkB,gBACpB,EAEMI,EAAuBhB,EAAc,aACvC,GACAR,EACEkB,EACAf,EACAG,EAAkB,cACpB,EAEEa,EAAOM,EAAQ,CACnB,SAAAH,EACA,cAAe,CACb,QAASd,GAAe,kBACxB,SAAUA,GAAe,aACzB,OAAQ,GACR,OAAQA,GAAe,OACvB,kBAAmB,GACnB,iBAAkB,GAClB,WAAY,CACV,eAAgBgB,CAClB,EACA,SAAUhB,GAAe,QAC3B,EACA,iBAAkB,GAClB,KAAM,QACR,CAAC,EAED,OAAAkB,EAAU,IAAM,CACd,GACElB,EAAc,cACdY,EAAkB,YAClBd,EAAkB,qBAClB,CAIA,IAAMqB,EAHeP,EAAkB,WAAW,KAC/CjB,GAAaA,EAAS,QAAUK,EAAc,YACjD,GACmC,MACnC,GAAImB,EAAc,CAChBb,EAAYa,CAA2B,EACvC,IAAMH,EAAuBxB,EAC3BkB,EACAS,EACArB,EAAkB,cACpB,EACAa,EAAK,SAAS,4BAA6BK,CAAoB,CACjE,CACF,CACF,EAAG,CACDhB,EAAc,aACdY,EAAkB,WAClBd,EAAkB,qBAClBA,EAAkB,eAClBa,CACF,CAAC,EAGCpB,EAAC6B,EAAsB,SAAtB,CACC,MAAO,CACL,KAAAT,EACA,OAAQP,EACR,kBAAAQ,CACF,EAEC,SAAAV,EAAOU,CAAiB,EAC3B,CAEJ,EA1GkC","names":["useEffect","useId","useState","jsx","getDefaultManagementFee","__name","baseRates","currency","managementFees","CostCalculatorFlow","estimationOptions","defaultEstimationOptions","defaultValues","options","render","version","formId","useId","setCurrency","useState","onCurrencyChange","managementFee","BASE_RATES","form","costCalculatorBag","useCostCalculator","resolver","useJsonSchemasValidationFormResolver","defaultManagementFee","useForm","useEffect","currencyCode","CostCalculatorContext"]}