@gusto/embedded-react-sdk 0.35.0-rc.3 → 0.36.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 (37) hide show
  1. package/CHANGELOG.md +20 -11
  2. package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatory.js +58 -57
  3. package/dist/components/Company/AssignSignatory/CreateSignatory/CreateSignatory.js.map +1 -1
  4. package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatory.js +18 -18
  5. package/dist/components/Company/AssignSignatory/InviteSignatory/InviteSignatory.js.map +1 -1
  6. package/dist/components/Company/BankAccount/BankAccountVerify/BankAccountVerify.js +17 -13
  7. package/dist/components/Company/BankAccount/BankAccountVerify/BankAccountVerify.js.map +1 -1
  8. package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js +1 -1
  9. package/dist/components/Company/DocumentSigner/DocumentList/DocumentList.js.map +1 -1
  10. package/dist/components/Company/DocumentSigner/DocumentSigner.js +5 -5
  11. package/dist/components/Company/DocumentSigner/DocumentSigner.js.map +1 -1
  12. package/dist/components/Employee/Compensation/Compensation.js +21 -21
  13. package/dist/components/Employee/Compensation/Compensation.js.map +1 -1
  14. package/dist/components/Employee/FederalTaxes/FederalForm.d.ts +2 -8
  15. package/dist/components/Employee/FederalTaxes/FederalForm.js +29 -84
  16. package/dist/components/Employee/FederalTaxes/FederalForm.js.map +1 -1
  17. package/dist/components/Employee/FederalTaxes/FederalTaxes.js +44 -49
  18. package/dist/components/Employee/FederalTaxes/FederalTaxes.js.map +1 -1
  19. package/dist/components/Employee/Taxes/FederalForm.d.ts +2 -8
  20. package/dist/components/Employee/Taxes/FederalForm.js +29 -84
  21. package/dist/components/Employee/Taxes/FederalForm.js.map +1 -1
  22. package/dist/components/Employee/Taxes/Taxes.js +69 -74
  23. package/dist/components/Employee/Taxes/Taxes.js.map +1 -1
  24. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js +6 -6
  25. package/dist/components/Payroll/OffCycleCreation/OffCycleCreation.js.map +1 -1
  26. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js +12 -12
  27. package/dist/components/Payroll/PayrollBlocker/components/PayrollBlockerList.js.map +1 -1
  28. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js +2 -2
  29. package/dist/components/Payroll/PayrollConfiguration/PayrollConfiguration.js.map +1 -1
  30. package/dist/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.js.map +1 -1
  31. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js +6 -4
  32. package/dist/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.js.map +1 -1
  33. package/dist/components/Payroll/PayrollList/PayrollList.js +8 -6
  34. package/dist/components/Payroll/PayrollList/PayrollList.js.map +1 -1
  35. package/dist/components/Payroll/helpers.d.ts +1 -1
  36. package/dist/components/Payroll/helpers.js.map +1 -1
  37. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"OffCycleCreation.js","sources":["../../../../src/components/Payroll/OffCycleCreation/OffCycleCreation.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { FormProvider, useForm, type Resolver } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsCreateOffCycleMutation } from '@gusto/embedded-api/react-query/payrollsCreateOffCycle'\nimport {\n OffCycleReason as ApiOffCycleReason,\n WithholdingPayPeriod,\n} from '@gusto/embedded-api/models/operations/postv1companiescompanyidpayrolls'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport { OFF_CYCLE_REASON_DEFAULTS, type OffCycleReason } from '../OffCycleReasonSelection'\nimport {\n createOffCyclePayPeriodDateFormSchema,\n type OffCyclePayrollDateType,\n} from '../OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes'\nimport { useOffCyclePayPeriodDateValidation } from '../OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation'\nimport type { OffCycleTaxWithholdingConfig } from '../OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes'\nimport type { OffCycleCreationFormData, OffCycleCreationProps } from './OffCycleCreationTypes'\nimport { OffCycleCreationPresentation } from './OffCycleCreationPresentation'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { useBase } from '@/components/Base/useBase'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { componentEvents } from '@/shared/constants'\nimport { Form } from '@/components/Common/Form'\nimport type { MultiSelectComboBoxOption } from '@/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes'\n\nconst LOCAL_TO_API_REASON: Record<OffCycleReason, ApiOffCycleReason> = {\n bonus: ApiOffCycleReason.Bonus,\n correction: ApiOffCycleReason.Correction,\n}\n\nexport function OffCycleCreation(props: OffCycleCreationProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props} />\n </BaseComponent>\n )\n}\n\nfunction Root({ dictionary, companyId, payrollType = 'bonus' }: OffCycleCreationProps) {\n useComponentDictionary('Payroll.OffCycleCreation', dictionary)\n useI18n('Payroll.OffCycleCreation')\n useI18n('Payroll.OffCycleReasonSelection')\n useI18n('Payroll.OffCyclePayPeriodDateForm')\n useI18n('Payroll.OffCycleDeductionsSetting')\n useI18n('Payroll.EmployeeSelection')\n\n const { t } = useTranslation('Payroll.OffCyclePayPeriodDateForm')\n const { t: tCreation } = useTranslation('Payroll.OffCycleCreation')\n const { onEvent, baseSubmitHandler } = useBase()\n\n const { minCheckDate, today } = useOffCyclePayPeriodDateValidation()\n const { mutateAsync: createOffCyclePayroll, isPending } = usePayrollsCreateOffCycleMutation()\n\n const [taxWithholdingConfig, setTaxWithholdingConfig] = useState<OffCycleTaxWithholdingConfig>({\n withholdingPayPeriod: WithholdingPayPeriod.EveryOtherWeek,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[payrollType].withholdingType,\n })\n const [isTaxWithholdingModalOpen, setIsTaxWithholdingModalOpen] = useState(false)\n\n const handleTaxWithholdingEditClick = useCallback(() => {\n setIsTaxWithholdingModalOpen(true)\n }, [])\n\n const handleTaxWithholdingModalDone = useCallback((config: OffCycleTaxWithholdingConfig) => {\n setTaxWithholdingConfig(config)\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const handleTaxWithholdingModalCancel = useCallback(() => {\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const { data: employeesData, isLoading: isLoadingEmployees } = useEmployeesListSuspense({\n companyId,\n onboardedActive: true,\n })\n\n const employees: MultiSelectComboBoxOption[] = useMemo(() => {\n const employeeList = employeesData.showEmployees ?? []\n return employeeList.map(employee => {\n const fullName = [employee.firstName, employee.lastName].filter(Boolean).join(' ')\n return {\n label: fullName,\n value: employee.uuid,\n }\n })\n }, [employeesData])\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const translateValidation = (key: string): string => t(key as any) as string\n\n const dynamicResolver: Resolver<OffCycleCreationFormData> = (values, context, options) => {\n const reason = values.reason\n const isCheckOnly = values.isCheckOnly\n const resolvedPayrollType: OffCyclePayrollDateType =\n reason === 'correction' ? 'correction' : payrollType\n\n const dateSchema = createOffCyclePayPeriodDateFormSchema(\n translateValidation,\n resolvedPayrollType,\n isCheckOnly ? today : minCheckDate,\n )\n const schema = z\n .object({\n reason: z.enum(['bonus', 'correction']),\n skipRegularDeductions: z.boolean(),\n includeAllEmployees: z.boolean(),\n selectedEmployeeUuids: z.array(z.string()),\n })\n .and(dateSchema)\n .superRefine((data, ctx) => {\n if (!data.includeAllEmployees && data.selectedEmployeeUuids.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['selectedEmployeeUuids'],\n message: tCreation('errors.noEmployeesSelected'),\n })\n }\n })\n\n return zodResolver(schema)(values, context, options)\n }\n\n const methods = useForm<OffCycleCreationFormData>({\n resolver: dynamicResolver,\n defaultValues: {\n reason: payrollType,\n isCheckOnly: false,\n startDate: null,\n endDate: null,\n checkDate: null,\n skipRegularDeductions: OFF_CYCLE_REASON_DEFAULTS[payrollType].skipDeductions,\n includeAllEmployees: true,\n selectedEmployeeUuids: [],\n },\n })\n\n const watchedReason = methods.watch('reason')\n\n useEffect(() => {\n methods.setValue(\n 'skipRegularDeductions',\n OFF_CYCLE_REASON_DEFAULTS[watchedReason].skipDeductions,\n )\n setTaxWithholdingConfig(prev => ({\n ...prev,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[watchedReason].withholdingType,\n }))\n }, [watchedReason, methods])\n\n const onSubmit = async (data: OffCycleCreationFormData) => {\n const reason = data.reason\n const checkDate = data.checkDate!\n const startDate = data.isCheckOnly ? checkDate : data.startDate!\n const endDate = data.isCheckOnly ? checkDate : data.endDate!\n const employeeUuids =\n !data.includeAllEmployees && data.selectedEmployeeUuids.length > 0\n ? data.selectedEmployeeUuids\n : undefined\n\n await baseSubmitHandler(data, async () => {\n const response = await createOffCyclePayroll({\n request: {\n companyId,\n requestBody: {\n offCycle: true,\n offCycleReason: LOCAL_TO_API_REASON[reason],\n startDate: new RFCDate(startDate),\n endDate: new RFCDate(endDate),\n checkDate: new RFCDate(checkDate),\n skipRegularDeductions: data.skipRegularDeductions,\n isCheckOnlyPayroll: data.isCheckOnly,\n employeeUuids,\n withholdingPayPeriod: taxWithholdingConfig.withholdingPayPeriod,\n fixedWithholdingRate: taxWithholdingConfig.withholdingRate === 'supplemental',\n },\n },\n })\n\n const payrollUuid = response.payrollPrepared?.payrollUuid ?? response.payrollPrepared?.uuid\n\n if (!payrollUuid) {\n throw new Error(tCreation('errors.missingPayrollId'))\n }\n\n onEvent(componentEvents.OFF_CYCLE_CREATED, { payrollUuid })\n })\n }\n\n return (\n <FormProvider {...methods}>\n <Form onSubmit={methods.handleSubmit(onSubmit)}>\n <OffCycleCreationPresentation\n employees={employees}\n isLoadingEmployees={isLoadingEmployees}\n isPending={isPending}\n taxWithholdingConfig={taxWithholdingConfig}\n isTaxWithholdingModalOpen={isTaxWithholdingModalOpen}\n onTaxWithholdingEditClick={handleTaxWithholdingEditClick}\n onTaxWithholdingModalDone={handleTaxWithholdingModalDone}\n onTaxWithholdingModalCancel={handleTaxWithholdingModalCancel}\n />\n </Form>\n </FormProvider>\n )\n}\n"],"names":["LOCAL_TO_API_REASON","ApiOffCycleReason","OffCycleCreation","props","jsx","BaseComponent","Root","dictionary","companyId","payrollType","useComponentDictionary","useI18n","t","useTranslation","tCreation","onEvent","baseSubmitHandler","useBase","minCheckDate","today","useOffCyclePayPeriodDateValidation","createOffCyclePayroll","isPending","usePayrollsCreateOffCycleMutation","taxWithholdingConfig","setTaxWithholdingConfig","useState","WithholdingPayPeriod","OFF_CYCLE_REASON_DEFAULTS","isTaxWithholdingModalOpen","setIsTaxWithholdingModalOpen","handleTaxWithholdingEditClick","useCallback","handleTaxWithholdingModalDone","config","handleTaxWithholdingModalCancel","employeesData","isLoadingEmployees","useEmployeesListSuspense","employees","useMemo","employee","translateValidation","key","methods","useForm","values","context","options","reason","isCheckOnly","dateSchema","createOffCyclePayPeriodDateFormSchema","schema","z","data","ctx","zodResolver","watchedReason","useEffect","prev","onSubmit","checkDate","startDate","endDate","employeeUuids","response","RFCDate","payrollUuid","componentEvents","FormProvider","Form","OffCycleCreationPresentation"],"mappings":"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"}
1
+ {"version":3,"file":"OffCycleCreation.js","sources":["../../../../src/components/Payroll/OffCycleCreation/OffCycleCreation.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { FormProvider, useForm, type Resolver } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsCreateOffCycleMutation } from '@gusto/embedded-api/react-query/payrollsCreateOffCycle'\nimport {\n OffCycleReason as ApiOffCycleReason,\n WithholdingPayPeriod,\n} from '@gusto/embedded-api/models/operations/postv1companiescompanyidpayrolls'\nimport { RFCDate } from '@gusto/embedded-api/types/rfcdate'\nimport { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'\nimport { OFF_CYCLE_REASON_DEFAULTS, type OffCycleReason } from '../OffCycleReasonSelection'\nimport {\n createOffCyclePayPeriodDateFormSchema,\n type OffCyclePayrollDateType,\n} from '../OffCyclePayPeriodDateForm/OffCyclePayPeriodDateFormTypes'\nimport { useOffCyclePayPeriodDateValidation } from '../OffCyclePayPeriodDateForm/useOffCyclePayPeriodDateValidation'\nimport type { OffCycleTaxWithholdingConfig } from '../OffCycleTaxWithholdingTable/OffCycleTaxWithholdingTableTypes'\nimport type { OffCycleCreationFormData, OffCycleCreationProps } from './OffCycleCreationTypes'\nimport { OffCycleCreationPresentation } from './OffCycleCreationPresentation'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { useBase } from '@/components/Base/useBase'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { componentEvents } from '@/shared/constants'\nimport { Form } from '@/components/Common/Form'\nimport type { MultiSelectComboBoxOption } from '@/components/Common/UI/MultiSelectComboBox/MultiSelectComboBoxTypes'\n\nconst LOCAL_TO_API_REASON: Record<OffCycleReason, ApiOffCycleReason> = {\n bonus: ApiOffCycleReason.Bonus,\n correction: ApiOffCycleReason.Correction,\n}\n\nexport function OffCycleCreation(props: OffCycleCreationProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props} />\n </BaseComponent>\n )\n}\n\nfunction Root({ dictionary, companyId, payrollType = 'bonus' }: OffCycleCreationProps) {\n useComponentDictionary('Payroll.OffCycleCreation', dictionary)\n useI18n('Payroll.OffCycleCreation')\n useI18n('Payroll.OffCycleReasonSelection')\n useI18n('Payroll.OffCyclePayPeriodDateForm')\n useI18n('Payroll.OffCycleDeductionsSetting')\n useI18n('Payroll.EmployeeSelection')\n\n const { t } = useTranslation('Payroll.OffCyclePayPeriodDateForm')\n const { t: tCreation } = useTranslation('Payroll.OffCycleCreation')\n const { onEvent, baseSubmitHandler } = useBase()\n\n const { minCheckDate, today } = useOffCyclePayPeriodDateValidation()\n const { mutateAsync: createOffCyclePayroll, isPending } = usePayrollsCreateOffCycleMutation()\n\n const [taxWithholdingConfig, setTaxWithholdingConfig] = useState<OffCycleTaxWithholdingConfig>({\n withholdingPayPeriod: WithholdingPayPeriod.EveryOtherWeek,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[payrollType].withholdingType,\n })\n const [isTaxWithholdingModalOpen, setIsTaxWithholdingModalOpen] = useState(false)\n\n const handleTaxWithholdingEditClick = useCallback(() => {\n setIsTaxWithholdingModalOpen(true)\n }, [])\n\n const handleTaxWithholdingModalDone = useCallback((config: OffCycleTaxWithholdingConfig) => {\n setTaxWithholdingConfig(config)\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const handleTaxWithholdingModalCancel = useCallback(() => {\n setIsTaxWithholdingModalOpen(false)\n }, [])\n\n const { data: employeesData, isLoading: isLoadingEmployees } = useEmployeesListSuspense({\n companyId,\n onboardedActive: true,\n })\n\n const employees: MultiSelectComboBoxOption[] = useMemo(() => {\n const employeeList = employeesData.showEmployees ?? []\n return employeeList.map(employee => {\n const fullName = [employee.firstName, employee.lastName].filter(Boolean).join(' ')\n return {\n label: fullName,\n value: employee.uuid,\n }\n })\n }, [employeesData])\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const translateValidation = (key: string): string => t(key as any) as string\n\n const dynamicResolver: Resolver<OffCycleCreationFormData> = (values, context, options) => {\n const reason = values.reason\n const isCheckOnly = values.isCheckOnly\n const resolvedPayrollType: OffCyclePayrollDateType =\n reason === 'correction' ? 'correction' : payrollType\n\n const dateSchema = createOffCyclePayPeriodDateFormSchema(\n translateValidation,\n resolvedPayrollType,\n isCheckOnly ? today : minCheckDate,\n )\n const schema = z\n .object({\n reason: z.enum(['bonus', 'correction']),\n skipRegularDeductions: z.boolean(),\n includeAllEmployees: z.boolean(),\n selectedEmployeeUuids: z.array(z.string()),\n })\n .and(dateSchema)\n .superRefine((data, ctx) => {\n if (!data.includeAllEmployees && data.selectedEmployeeUuids.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['selectedEmployeeUuids'],\n message: tCreation('errors.noEmployeesSelected'),\n })\n }\n })\n\n return zodResolver(schema)(values, context, options)\n }\n\n const methods = useForm<OffCycleCreationFormData>({\n resolver: dynamicResolver,\n defaultValues: {\n reason: payrollType,\n isCheckOnly: false,\n startDate: null,\n endDate: null,\n checkDate: null,\n skipRegularDeductions: OFF_CYCLE_REASON_DEFAULTS[payrollType].skipDeductions,\n includeAllEmployees: true,\n selectedEmployeeUuids: [],\n },\n })\n\n const watchedReason = methods.watch('reason')\n\n useEffect(() => {\n methods.setValue(\n 'skipRegularDeductions',\n OFF_CYCLE_REASON_DEFAULTS[watchedReason].skipDeductions,\n )\n setTaxWithholdingConfig(prev => ({\n ...prev,\n withholdingRate: OFF_CYCLE_REASON_DEFAULTS[watchedReason].withholdingType,\n }))\n }, [watchedReason, methods])\n\n const onSubmit = async (data: OffCycleCreationFormData) => {\n const reason = data.reason\n const checkDate = data.checkDate!\n const startDate = data.isCheckOnly ? checkDate : data.startDate!\n const endDate = data.isCheckOnly ? checkDate : data.endDate!\n const employeeUuids =\n !data.includeAllEmployees && data.selectedEmployeeUuids.length > 0\n ? data.selectedEmployeeUuids\n : undefined\n\n await baseSubmitHandler(data, async () => {\n const response = await createOffCyclePayroll({\n request: {\n companyId,\n requestBody: {\n offCycle: true,\n offCycleReason: LOCAL_TO_API_REASON[reason],\n startDate: new RFCDate(startDate),\n endDate: new RFCDate(endDate),\n checkDate: new RFCDate(checkDate),\n skipRegularDeductions: data.skipRegularDeductions,\n isCheckOnlyPayroll: data.isCheckOnly,\n employeeUuids,\n withholdingPayPeriod: taxWithholdingConfig.withholdingPayPeriod,\n fixedWithholdingRate: taxWithholdingConfig.withholdingRate === 'supplemental',\n },\n },\n })\n\n const payrollUuid =\n response.payrollUnprocessed?.payrollUuid ?? response.payrollUnprocessed?.uuid\n\n if (!payrollUuid) {\n throw new Error(tCreation('errors.missingPayrollId'))\n }\n\n onEvent(componentEvents.OFF_CYCLE_CREATED, { payrollUuid })\n })\n }\n\n return (\n <FormProvider {...methods}>\n <Form onSubmit={methods.handleSubmit(onSubmit)}>\n <OffCycleCreationPresentation\n employees={employees}\n isLoadingEmployees={isLoadingEmployees}\n isPending={isPending}\n taxWithholdingConfig={taxWithholdingConfig}\n isTaxWithholdingModalOpen={isTaxWithholdingModalOpen}\n onTaxWithholdingEditClick={handleTaxWithholdingEditClick}\n onTaxWithholdingModalDone={handleTaxWithholdingModalDone}\n onTaxWithholdingModalCancel={handleTaxWithholdingModalCancel}\n />\n </Form>\n </FormProvider>\n )\n}\n"],"names":["LOCAL_TO_API_REASON","ApiOffCycleReason","OffCycleCreation","props","jsx","BaseComponent","Root","dictionary","companyId","payrollType","useComponentDictionary","useI18n","t","useTranslation","tCreation","onEvent","baseSubmitHandler","useBase","minCheckDate","today","useOffCyclePayPeriodDateValidation","createOffCyclePayroll","isPending","usePayrollsCreateOffCycleMutation","taxWithholdingConfig","setTaxWithholdingConfig","useState","WithholdingPayPeriod","OFF_CYCLE_REASON_DEFAULTS","isTaxWithholdingModalOpen","setIsTaxWithholdingModalOpen","handleTaxWithholdingEditClick","useCallback","handleTaxWithholdingModalDone","config","handleTaxWithholdingModalCancel","employeesData","isLoadingEmployees","useEmployeesListSuspense","employees","useMemo","employee","translateValidation","key","methods","useForm","values","context","options","reason","isCheckOnly","dateSchema","createOffCyclePayPeriodDateFormSchema","schema","z","data","ctx","zodResolver","watchedReason","useEffect","prev","onSubmit","checkDate","startDate","endDate","employeeUuids","response","RFCDate","payrollUuid","componentEvents","FormProvider","Form","OffCycleCreationPresentation"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as o, jsxs as m } from "react/jsx-runtime";
2
2
  import { useState as _, useCallback as d } from "react";
3
3
  import { useTranslation as N } from "react-i18next";
4
- import R from "classnames";
4
+ import k from "classnames";
5
5
  import { usePayrollsGetBlockersSuspense as O } from "@gusto/embedded-api/react-query/payrollsGetBlockers";
6
6
  import { useRecoveryCasesGetSuspense as V } from "@gusto/embedded-api/react-query/recoveryCasesGet";
7
7
  import { useInformationRequestsGetInformationRequestsSuspense as F } from "@gusto/embedded-api/react-query/informationRequestsGetInformationRequests";
@@ -47,8 +47,8 @@ function ee({ className: s, companyId: n, dictionary: B, onEvent: u }) {
47
47
  companyUuid: n
48
48
  }), { data: q } = F({
49
49
  companyUuid: n
50
- }), y = (A.payrollBlockerList ?? []).map((e) => {
51
- const t = e.key ?? "unknown", l = G(t), T = r(l.titleKey, {
50
+ }), y = (A.payrollBlockers ?? []).map((e) => {
51
+ const t = e.key, l = G(t), T = r(l.titleKey, {
52
52
  defaultValue: t.replace(/_/g, " ").replace(/\b\w/g, (U) => U.toUpperCase())
53
53
  }), I = r(l.descriptionKey, {
54
54
  defaultValue: e.message || r("defaultBlockerDescription")
@@ -58,11 +58,11 @@ function ee({ className: s, companyId: n, dictionary: B, onEvent: u }) {
58
58
  title: T,
59
59
  description: I
60
60
  };
61
- }), w = S.recoveryCaseList ?? [], L = q.informationRequestList ?? [], h = w.some(
61
+ }), P = S.recoveryCaseList ?? [], w = q.informationRequestList ?? [], h = P.some(
62
62
  (e) => e.status !== "recovered"
63
- ), k = L.some(
63
+ ), C = w.some(
64
64
  (e) => e.status !== K.Approved
65
- ), P = Y({
65
+ ), L = Y({
66
66
  data: y,
67
67
  columns: [
68
68
  {
@@ -80,8 +80,8 @@ function ee({ className: s, companyId: n, dictionary: B, onEvent: u }) {
80
80
  }
81
81
  }
82
82
  ]
83
- }), C = y.length > 0;
84
- return C || h || k ? /* @__PURE__ */ o("div", { className: R(v.root, s), children: /* @__PURE__ */ m(a, { flexDirection: "column", gap: 32, children: [
83
+ }), R = y.length > 0;
84
+ return R || h || C ? /* @__PURE__ */ o("div", { className: k(v.root, s), children: /* @__PURE__ */ m(a, { flexDirection: "column", gap: 32, children: [
85
85
  x.alerts.map((e) => /* @__PURE__ */ o(
86
86
  g,
87
87
  {
@@ -94,13 +94,13 @@ function ee({ className: s, companyId: n, dictionary: B, onEvent: u }) {
94
94
  },
95
95
  e.id
96
96
  )),
97
- C && /* @__PURE__ */ m(a, { flexDirection: "column", gap: 20, children: [
97
+ R && /* @__PURE__ */ m(a, { flexDirection: "column", gap: 20, children: [
98
98
  /* @__PURE__ */ o(b, { as: "h2", styledAs: "h4", children: r("blockersListTitle") }),
99
- /* @__PURE__ */ o(Q, { ...P, label: r("blockersListTitle") })
99
+ /* @__PURE__ */ o(Q, { ...L, label: r("blockersListTitle") })
100
100
  ] }),
101
101
  h && /* @__PURE__ */ o(W, { companyId: n, onEvent: p }),
102
- k && /* @__PURE__ */ o(Z, { companyId: n, withAlert: !1, onEvent: p })
103
- ] }) }) : /* @__PURE__ */ o("div", { className: R(v.root, s), children: /* @__PURE__ */ o(i, { children: r("noBlockersMessage") }) });
102
+ C && /* @__PURE__ */ o(Z, { companyId: n, withAlert: !1, onEvent: p })
103
+ ] }) }) : /* @__PURE__ */ o("div", { className: k(v.root, s), children: /* @__PURE__ */ o(i, { children: r("noBlockersMessage") }) });
104
104
  }
105
105
  export {
106
106
  be as PayrollBlockerList
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollBlockerList.js","sources":["../../../../../src/components/Payroll/PayrollBlocker/components/PayrollBlockerList.tsx"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport classNames from 'classnames'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { useRecoveryCasesGetSuspense } from '@gusto/embedded-api/react-query/recoveryCasesGet'\nimport { useInformationRequestsGetInformationRequestsSuspense } from '@gusto/embedded-api/react-query/informationRequestsGetInformationRequests'\nimport { InformationRequestStatus } from '@gusto/embedded-api/models/components/informationrequest'\nimport { getBlockerTranslationKeys } from '../payrollHelpers'\nimport styles from './PayrollBlockerList.module.scss'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Flex, FlexItem } from '@/components/Common'\nimport { DataView } from '@/components/Common/DataView/DataView'\nimport { useDataView } from '@/components/Common/DataView/useDataView'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { RecoveryCases } from '@/components/Payroll/RecoveryCases'\nimport { InformationRequestsFlow } from '@/components/InformationRequests'\nimport { BaseComponent, type BaseComponentInterface } from '@/components/Base'\nimport { informationRequestEvents, recoveryCasesEvents, type EventType } from '@/shared/constants'\n\ntype ResponseAlertType = 'recoveryCaseResubmitted' | 'informationRequestResponded'\n\ninterface ResponseAlert {\n id: number\n type: ResponseAlertType\n}\n\ninterface ResponseAlertState {\n id: number\n alerts: ResponseAlert[]\n}\n\ninterface PayrollBlocker {\n id: string\n title: string\n description: string\n action?: {\n label: string\n onClick: () => void\n }\n}\n\ninterface PayrollBlockerListProps extends BaseComponentInterface<'Payroll.PayrollBlocker'> {\n companyId: string\n}\n\n/**\n * PayrollBlockerList - DataView-based component displaying payroll blockers\n * Shows each blocker with individual resolution buttons\n * Also displays recovery cases and information requests sections when applicable\n */\nexport function PayrollBlockerList(props: PayrollBlockerListProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nfunction Root({ className, companyId, dictionary, onEvent }: PayrollBlockerListProps) {\n useComponentDictionary('Payroll.PayrollBlocker', dictionary)\n useI18n('Payroll.PayrollBlocker')\n const { t } = useTranslation('Payroll.PayrollBlocker')\n const { Button, Text, Heading, Alert } = useComponentContext()\n\n const [alertState, setAlertState] = useState<ResponseAlertState>({\n id: 0,\n alerts: [],\n })\n\n const handleDismissAlert = useCallback((alertId: number) => {\n setAlertState(prev => ({\n ...prev,\n alerts: prev.alerts.filter(alert => alert.id !== alertId),\n }))\n }, [])\n\n const addAlert = useCallback((alertType: ResponseAlertType) => {\n setAlertState(prev => ({\n id: prev.id + 1,\n alerts: [{ id: prev.id, type: alertType }, ...prev.alerts],\n }))\n }, [])\n\n const handleEvent = useCallback(\n (type: EventType, data?: unknown) => {\n if (type === recoveryCasesEvents.RECOVERY_CASE_RESUBMIT_DONE) {\n addAlert('recoveryCaseResubmitted')\n }\n\n if (type === informationRequestEvents.INFORMATION_REQUEST_FORM_DONE) {\n addAlert('informationRequestResponded')\n }\n\n onEvent(type, data)\n },\n [onEvent, addAlert],\n )\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const { data: recoveryCasesData } = useRecoveryCasesGetSuspense({\n companyUuid: companyId,\n })\n\n const { data: informationRequestsData } = useInformationRequestsGetInformationRequestsSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockerList ?? []\n const blockers: PayrollBlocker[] = payrollBlockerList.map(blocker => {\n const blockerKey = blocker.key ?? 'unknown'\n const translationKeys = getBlockerTranslationKeys(blockerKey)\n\n const title = t(translationKeys.titleKey, {\n defaultValue: blockerKey.replace(/_/g, ' ').replace(/\\b\\w/g, letter => letter.toUpperCase()),\n })\n\n const description = t(translationKeys.descriptionKey, {\n defaultValue: blocker.message || t('defaultBlockerDescription'),\n })\n\n return {\n id: blockerKey,\n title,\n description,\n }\n })\n\n const recoveryCases = recoveryCasesData.recoveryCaseList ?? []\n const informationRequests = informationRequestsData.informationRequestList ?? []\n\n const hasUnrecoveredCases = recoveryCases.some(\n recoveryCase => recoveryCase.status !== 'recovered',\n )\n\n const hasInformationRequests = informationRequests.some(\n request => request.status !== InformationRequestStatus.Approved,\n )\n\n const dataViewProps = useDataView({\n data: blockers,\n columns: [\n {\n title: t('blockerSectionLabel'),\n render: blocker => (\n <FlexItem flexGrow={1}>\n <Flex flexDirection=\"column\" gap={8}>\n <Text weight=\"semibold\">{blocker.title}</Text>\n <Text variant=\"supporting\">{blocker.description}</Text>\n </Flex>\n </FlexItem>\n ),\n },\n {\n title: '',\n render: blocker => {\n const action = blocker.action\n\n if (!action) {\n return null\n }\n\n return (\n <Flex justifyContent=\"flex-end\" alignItems=\"center\">\n <Button variant=\"secondary\" onClick={action.onClick} title={action.label}>\n {action.label}\n </Button>\n </Flex>\n )\n },\n },\n ],\n })\n\n const hasBlockers = blockers.length > 0\n const hasAnyContent = hasBlockers || hasUnrecoveredCases || hasInformationRequests\n\n if (!hasAnyContent) {\n return (\n <div className={classNames(styles.root, className)}>\n <Text>{t('noBlockersMessage')}</Text>\n </div>\n )\n }\n\n return (\n <div className={classNames(styles.root, className)}>\n <Flex flexDirection=\"column\" gap={32}>\n {alertState.alerts.map(alert => (\n <Alert\n key={alert.id}\n status=\"success\"\n label={t(`alerts.${alert.type}.title`)}\n onDismiss={() => {\n handleDismissAlert(alert.id)\n }}\n >\n <Text>{t(`alerts.${alert.type}.description`)}</Text>\n </Alert>\n ))}\n\n {hasBlockers && (\n <Flex flexDirection=\"column\" gap={20}>\n <Heading as=\"h2\" styledAs=\"h4\">\n {t('blockersListTitle')}\n </Heading>\n <DataView {...dataViewProps} label={t('blockersListTitle')} />\n </Flex>\n )}\n\n {hasUnrecoveredCases && <RecoveryCases companyId={companyId} onEvent={handleEvent} />}\n\n {hasInformationRequests && (\n <InformationRequestsFlow companyId={companyId} withAlert={false} onEvent={handleEvent} />\n )}\n </Flex>\n </div>\n )\n}\n"],"names":["PayrollBlockerList","props","jsx","BaseComponent","Root","className","companyId","dictionary","onEvent","useComponentDictionary","useI18n","t","useTranslation","Button","Text","Heading","Alert","useComponentContext","alertState","setAlertState","useState","handleDismissAlert","useCallback","alertId","prev","alert","addAlert","alertType","handleEvent","type","data","recoveryCasesEvents","informationRequestEvents","blockersData","usePayrollsGetBlockersSuspense","recoveryCasesData","useRecoveryCasesGetSuspense","informationRequestsData","useInformationRequestsGetInformationRequestsSuspense","blockers","blocker","blockerKey","translationKeys","getBlockerTranslationKeys","title","letter","description","recoveryCases","informationRequests","hasUnrecoveredCases","recoveryCase","hasInformationRequests","request","InformationRequestStatus","dataViewProps","useDataView","FlexItem","jsxs","Flex","action","hasBlockers","classNames","styles","DataView","RecoveryCases","InformationRequestsFlow"],"mappings":"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"}
1
+ {"version":3,"file":"PayrollBlockerList.js","sources":["../../../../../src/components/Payroll/PayrollBlocker/components/PayrollBlockerList.tsx"],"sourcesContent":["import { useState, useCallback } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport classNames from 'classnames'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { useRecoveryCasesGetSuspense } from '@gusto/embedded-api/react-query/recoveryCasesGet'\nimport { useInformationRequestsGetInformationRequestsSuspense } from '@gusto/embedded-api/react-query/informationRequestsGetInformationRequests'\nimport { InformationRequestStatus } from '@gusto/embedded-api/models/components/informationrequest'\nimport { getBlockerTranslationKeys } from '../payrollHelpers'\nimport styles from './PayrollBlockerList.module.scss'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { Flex, FlexItem } from '@/components/Common'\nimport { DataView } from '@/components/Common/DataView/DataView'\nimport { useDataView } from '@/components/Common/DataView/useDataView'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { RecoveryCases } from '@/components/Payroll/RecoveryCases'\nimport { InformationRequestsFlow } from '@/components/InformationRequests'\nimport { BaseComponent, type BaseComponentInterface } from '@/components/Base'\nimport { informationRequestEvents, recoveryCasesEvents, type EventType } from '@/shared/constants'\n\ntype ResponseAlertType = 'recoveryCaseResubmitted' | 'informationRequestResponded'\n\ninterface ResponseAlert {\n id: number\n type: ResponseAlertType\n}\n\ninterface ResponseAlertState {\n id: number\n alerts: ResponseAlert[]\n}\n\ninterface PayrollBlocker {\n id: string\n title: string\n description: string\n action?: {\n label: string\n onClick: () => void\n }\n}\n\ninterface PayrollBlockerListProps extends BaseComponentInterface<'Payroll.PayrollBlocker'> {\n companyId: string\n}\n\n/**\n * PayrollBlockerList - DataView-based component displaying payroll blockers\n * Shows each blocker with individual resolution buttons\n * Also displays recovery cases and information requests sections when applicable\n */\nexport function PayrollBlockerList(props: PayrollBlockerListProps) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nfunction Root({ className, companyId, dictionary, onEvent }: PayrollBlockerListProps) {\n useComponentDictionary('Payroll.PayrollBlocker', dictionary)\n useI18n('Payroll.PayrollBlocker')\n const { t } = useTranslation('Payroll.PayrollBlocker')\n const { Button, Text, Heading, Alert } = useComponentContext()\n\n const [alertState, setAlertState] = useState<ResponseAlertState>({\n id: 0,\n alerts: [],\n })\n\n const handleDismissAlert = useCallback((alertId: number) => {\n setAlertState(prev => ({\n ...prev,\n alerts: prev.alerts.filter(alert => alert.id !== alertId),\n }))\n }, [])\n\n const addAlert = useCallback((alertType: ResponseAlertType) => {\n setAlertState(prev => ({\n id: prev.id + 1,\n alerts: [{ id: prev.id, type: alertType }, ...prev.alerts],\n }))\n }, [])\n\n const handleEvent = useCallback(\n (type: EventType, data?: unknown) => {\n if (type === recoveryCasesEvents.RECOVERY_CASE_RESUBMIT_DONE) {\n addAlert('recoveryCaseResubmitted')\n }\n\n if (type === informationRequestEvents.INFORMATION_REQUEST_FORM_DONE) {\n addAlert('informationRequestResponded')\n }\n\n onEvent(type, data)\n },\n [onEvent, addAlert],\n )\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const { data: recoveryCasesData } = useRecoveryCasesGetSuspense({\n companyUuid: companyId,\n })\n\n const { data: informationRequestsData } = useInformationRequestsGetInformationRequestsSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockers ?? []\n const blockers: PayrollBlocker[] = payrollBlockerList.map(blocker => {\n const blockerKey = blocker.key\n const translationKeys = getBlockerTranslationKeys(blockerKey)\n\n const title = t(translationKeys.titleKey, {\n defaultValue: blockerKey\n .replace(/_/g, ' ')\n .replace(/\\b\\w/g, (letter: string) => letter.toUpperCase()),\n })\n\n const description = t(translationKeys.descriptionKey, {\n defaultValue: blocker.message || t('defaultBlockerDescription'),\n })\n\n return {\n id: blockerKey,\n title,\n description,\n }\n })\n\n const recoveryCases = recoveryCasesData.recoveryCaseList ?? []\n const informationRequests = informationRequestsData.informationRequestList ?? []\n\n const hasUnrecoveredCases = recoveryCases.some(\n recoveryCase => recoveryCase.status !== 'recovered',\n )\n\n const hasInformationRequests = informationRequests.some(\n request => request.status !== InformationRequestStatus.Approved,\n )\n\n const dataViewProps = useDataView({\n data: blockers,\n columns: [\n {\n title: t('blockerSectionLabel'),\n render: blocker => (\n <FlexItem flexGrow={1}>\n <Flex flexDirection=\"column\" gap={8}>\n <Text weight=\"semibold\">{blocker.title}</Text>\n <Text variant=\"supporting\">{blocker.description}</Text>\n </Flex>\n </FlexItem>\n ),\n },\n {\n title: '',\n render: blocker => {\n const action = blocker.action\n\n if (!action) {\n return null\n }\n\n return (\n <Flex justifyContent=\"flex-end\" alignItems=\"center\">\n <Button variant=\"secondary\" onClick={action.onClick} title={action.label}>\n {action.label}\n </Button>\n </Flex>\n )\n },\n },\n ],\n })\n\n const hasBlockers = blockers.length > 0\n const hasAnyContent = hasBlockers || hasUnrecoveredCases || hasInformationRequests\n\n if (!hasAnyContent) {\n return (\n <div className={classNames(styles.root, className)}>\n <Text>{t('noBlockersMessage')}</Text>\n </div>\n )\n }\n\n return (\n <div className={classNames(styles.root, className)}>\n <Flex flexDirection=\"column\" gap={32}>\n {alertState.alerts.map(alert => (\n <Alert\n key={alert.id}\n status=\"success\"\n label={t(`alerts.${alert.type}.title`)}\n onDismiss={() => {\n handleDismissAlert(alert.id)\n }}\n >\n <Text>{t(`alerts.${alert.type}.description`)}</Text>\n </Alert>\n ))}\n\n {hasBlockers && (\n <Flex flexDirection=\"column\" gap={20}>\n <Heading as=\"h2\" styledAs=\"h4\">\n {t('blockersListTitle')}\n </Heading>\n <DataView {...dataViewProps} label={t('blockersListTitle')} />\n </Flex>\n )}\n\n {hasUnrecoveredCases && <RecoveryCases companyId={companyId} onEvent={handleEvent} />}\n\n {hasInformationRequests && (\n <InformationRequestsFlow companyId={companyId} withAlert={false} onEvent={handleEvent} />\n )}\n </Flex>\n </div>\n )\n}\n"],"names":["PayrollBlockerList","props","jsx","BaseComponent","Root","className","companyId","dictionary","onEvent","useComponentDictionary","useI18n","t","useTranslation","Button","Text","Heading","Alert","useComponentContext","alertState","setAlertState","useState","handleDismissAlert","useCallback","alertId","prev","alert","addAlert","alertType","handleEvent","type","data","recoveryCasesEvents","informationRequestEvents","blockersData","usePayrollsGetBlockersSuspense","recoveryCasesData","useRecoveryCasesGetSuspense","informationRequestsData","useInformationRequestsGetInformationRequestsSuspense","blockers","blocker","blockerKey","translationKeys","getBlockerTranslationKeys","title","letter","description","recoveryCases","informationRequests","hasUnrecoveredCases","recoveryCase","hasInformationRequests","request","InformationRequestStatus","dataViewProps","useDataView","FlexItem","jsxs","Flex","action","hasBlockers","classNames","styles","DataView","RecoveryCases","InformationRequestsFlow"],"mappings":"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"}
@@ -125,8 +125,8 @@ const be = ({
125
125
  }
126
126
  }, { data: X } = de({
127
127
  companyUuid: p
128
- }), A = (X.payrollBlockerList ?? []).map((e) => ({
129
- key: e.key ?? "unknown",
128
+ }), A = (X.payrollBlockers ?? []).map((e) => ({
129
+ key: e.key,
130
130
  message: e.message
131
131
  })), [Z, S] = P(A), $ = async () => {
132
132
  S([]), await y({}, async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollConfiguration.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfiguration.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from 'react'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { usePayrollsCalculateMutation } from '@gusto/embedded-api/react-query/payrollsCalculate'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollProcessingRequest } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { PayrollProcessingRequestStatus } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsUpdateMutation } from '@gusto/embedded-api/react-query/payrollsUpdate'\nimport { usePayrollsCalculateGrossUpMutation } from '@gusto/embedded-api/react-query/payrollsCalculateGrossUp'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollUpdateEmployeeCompensations } from '@gusto/embedded-api/models/components/payrollupdate'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { payrollSubmitHandler, type ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { GrossUpModal } from '../GrossUpModal'\nimport { PayrollConfigurationPresentation } from './PayrollConfigurationPresentation'\nimport { usePayrollConfigurationData } from './usePayrollConfigurationData'\nimport { getGrossUpTargetCompensationName, isGrossUpEligible } from './grossUpHelpers'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { componentEvents } from '@/shared/constants'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useBase } from '@/components/Base'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\n\nconst isCalculating = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.Calculating\nconst isCalculated = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.CalculateSuccess\n\ninterface PayrollConfigurationProps extends BaseComponentInterface<'Payroll.PayrollConfiguration'> {\n companyId: string\n payrollId: string\n alerts?: ReactNode\n withReimbursements?: boolean\n}\n\nexport function PayrollConfiguration(props: PayrollConfigurationProps & BaseComponentInterface) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nexport const Root = ({\n onEvent,\n companyId,\n payrollId,\n dictionary,\n alerts,\n withReimbursements = true,\n}: PayrollConfigurationProps) => {\n useComponentDictionary('Payroll.PayrollConfiguration', dictionary)\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const { baseSubmitHandler } = useBase()\n const dateFormatter = useDateFormatter()\n\n const [isPolling, setIsPolling] = useState(false)\n\n const {\n employeeDetails,\n employeeCompensations,\n paySchedule,\n payPeriod,\n isOffCycle,\n offCycleReason,\n pagination,\n isLoading,\n refetch,\n } = usePayrollConfigurationData({\n companyId,\n payrollId,\n })\n\n const { data: payrollData } = usePayrollsGetSuspense(\n {\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions', 'payroll_status_meta'],\n },\n { refetchInterval: isPolling ? 5_000 : false },\n )\n\n const { mutateAsync: calculatePayroll, isPending: isCalculatingPayroll } =\n usePayrollsCalculateMutation()\n\n const { mutateAsync: updatePayroll, isPending: isUpdatingPayroll } = usePayrollsUpdateMutation()\n\n const { mutateAsync: calculateGrossUpMutation, isPending: isGrossUpPending } =\n usePayrollsCalculateGrossUpMutation()\n\n const [grossUpEmployeeUuid, setGrossUpEmployeeUuid] = useState<string | null>(null)\n const [isGrossUpModalOpen, setIsGrossUpModalOpen] = useState(false)\n\n const grossUpEnabled = isGrossUpEligible(isOffCycle, offCycleReason)\n const grossUpTargetCompensation = getGrossUpTargetCompensationName(offCycleReason)\n\n const onGrossUpSelect = (employeeUuid: string) => {\n setGrossUpEmployeeUuid(employeeUuid)\n setIsGrossUpModalOpen(true)\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid })\n }\n\n const onCalculateGrossUp = async (netPay: number): Promise<string | null> => {\n if (!grossUpEmployeeUuid) return null\n let grossUp: string | null = null\n\n await baseSubmitHandler(null, async () => {\n const result = await calculateGrossUpMutation({\n request: {\n payrollUuid: payrollId,\n payrollGrossUpRequest: {\n employeeUuid: grossUpEmployeeUuid,\n netPay: netPay.toString(),\n },\n },\n })\n\n grossUp = result.payrollGrossUpResponse?.grossUp ?? null\n\n if (grossUp) {\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_CALCULATED, {\n grossUp,\n netPay,\n employeeUuid: grossUpEmployeeUuid,\n })\n }\n })\n\n return grossUp\n }\n\n const onGrossUpApply = async (grossAmount: string) => {\n if (!grossUpEmployeeUuid || !grossUpTargetCompensation) {\n throw new Error('Unable to apply gross-up: missing employee or target compensation.')\n }\n\n const employeeComp = employeeCompensations.find(ec => ec.employeeUuid === grossUpEmployeeUuid)\n if (!employeeComp) {\n throw new Error('Unable to apply gross-up: employee compensation not found.')\n }\n\n const existingFixed = employeeComp.fixedCompensations ?? []\n const hasTargetCompensation = existingFixed.some(\n fc => fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase(),\n )\n\n const updatedFixedCompensations = existingFixed.map(fc => ({\n name: fc.name,\n jobUuid: fc.jobUuid,\n amount:\n fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase() ? grossAmount : '0',\n }))\n\n if (!hasTargetCompensation) {\n const primaryJobUuid =\n employeeComp.hourlyCompensations?.[0]?.jobUuid ?? existingFixed[0]?.jobUuid ?? ''\n updatedFixedCompensations.push({\n name: grossUpTargetCompensation,\n jobUuid: primaryJobUuid,\n amount: grossAmount,\n })\n }\n\n const updatedHourlyCompensations = (employeeComp.hourlyCompensations ?? []).map(hc => ({\n name: hc.name,\n jobUuid: hc.jobUuid,\n hours: '0',\n }))\n\n const updatedPaidTimeOff = (employeeComp.paidTimeOff ?? []).map(pto => ({\n name: pto.name,\n hours: '0',\n }))\n\n const transformedCompensation = transformEmployeeCompensation({\n ...employeeComp,\n fixedCompensations: updatedFixedCompensations,\n hourlyCompensations: updatedHourlyCompensations,\n paidTimeOff: updatedPaidTimeOff,\n })\n\n await baseSubmitHandler({}, async () => {\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [{ ...transformedCompensation, excluded: false }],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n\n setGrossUpEmployeeUuid(null)\n setIsGrossUpModalOpen(false)\n }\n\n const handleGrossUpApply = async (grossAmount: string) => {\n try {\n await onGrossUpApply(grossAmount)\n } catch {\n // Modal stays open; error is surfaced by baseSubmitHandler\n }\n }\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockerList ?? []\n\n const blockersFromApi: ApiPayrollBlocker[] = payrollBlockerList.map(blocker => ({\n key: blocker.key ?? 'unknown',\n message: blocker.message,\n }))\n\n const [payrollBlockers, setPayrollBlockers] = useState<ApiPayrollBlocker[]>(blockersFromApi)\n\n const onCalculatePayroll = async () => {\n setPayrollBlockers([])\n\n await baseSubmitHandler({}, async () => {\n const result = await payrollSubmitHandler(async () => {\n await calculatePayroll({\n request: {\n companyId,\n payrollId,\n },\n })\n setIsPolling(true)\n })\n\n if (!result.success && result.blockers.length > 0) {\n setPayrollBlockers(result.blockers)\n }\n })\n }\n\n const onEdit = (employee: Employee) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT, {\n employeeId: employee.uuid,\n firstName: employee.firstName,\n lastName: employee.lastName,\n })\n }\n\n const transformEmployeeCompensation = ({\n paymentMethod,\n reimbursements,\n ...compensation\n }: PayrollEmployeeCompensationsType): PayrollUpdateEmployeeCompensations => {\n return {\n ...compensation,\n ...(paymentMethod && paymentMethod !== 'Historical' ? { paymentMethod } : {}),\n memo: compensation.memo || undefined,\n }\n }\n\n const onToggleExclude = async (employeeCompensation: PayrollEmployeeCompensationsType) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SKIP, {\n employeeId: employeeCompensation.employeeUuid,\n })\n await baseSubmitHandler({}, async () => {\n const transformedCompensation = transformEmployeeCompensation(employeeCompensation)\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [\n { ...transformedCompensation, excluded: !transformedCompensation.excluded },\n ],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n }\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n useEffect(() => {\n if (isCalculating(payrollData.payrollShow?.processingRequest) && !isPolling) {\n setIsPolling(true)\n }\n if (isPolling && isCalculated(payrollData.payrollShow?.processingRequest)) {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: {\n type: 'success',\n title: t('alerts.progressSaved'),\n alertKey: 'progressSaved',\n },\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n setPayrollBlockers([])\n setIsPolling(false)\n }\n if (\n isPolling &&\n payrollData.payrollShow?.processingRequest?.status ===\n PayrollProcessingRequestStatus.ProcessingFailed\n ) {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }\n }, [payrollData.payrollShow?.processingRequest, isPolling, onEvent, t, payrollId])\n\n const payrollAlert =\n payrollData.payrollShow?.payrollStatusMeta?.payrollLate &&\n payrollData.payrollShow.payrollStatusMeta.initialCheckDate &&\n payrollData.payrollShow.payrollStatusMeta.expectedDebitTime &&\n payrollData.payrollShow.payrollStatusMeta.expectedCheckDate\n ? {\n label: t('alerts.payrollLate', {\n initialCheckDate: dateFormatter.formatShortWithWeekday(\n payrollData.payrollShow.payrollStatusMeta.initialCheckDate,\n ),\n }),\n content: t('alerts.payrollLateText', {\n ...dateFormatter.formatWithTime(\n payrollData.payrollShow.payrollStatusMeta.expectedDebitTime,\n ),\n newCheckDate: dateFormatter.formatShortWithWeekday(\n payrollData.payrollShow.payrollStatusMeta.expectedCheckDate,\n ),\n }),\n variant: 'warning' as const,\n }\n : payrollData.payrollShow\n ? {\n label: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollData.payrollShow.checkDate),\n ...dateFormatter.formatWithTime(payrollData.payrollShow.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n variant: 'info' as const,\n }\n : undefined\n\n return (\n <>\n <PayrollConfigurationPresentation\n onCalculatePayroll={onCalculatePayroll}\n isCalculateDisabled={blockersFromApi.length > 0}\n onEdit={onEdit}\n onToggleExclude={onToggleExclude}\n onViewBlockers={onViewBlockers}\n employeeCompensations={employeeCompensations}\n employeeDetails={employeeDetails}\n payPeriod={payPeriod}\n paySchedule={paySchedule}\n isOffCycle={isOffCycle}\n offCycleReason={offCycleReason}\n alerts={alerts}\n payrollAlert={payrollAlert}\n isPending={isPolling || isLoading || isUpdatingPayroll || isCalculatingPayroll}\n isCalculating={isCalculatingPayroll || isPolling}\n payrollBlockers={payrollBlockers}\n pagination={pagination}\n withReimbursements={withReimbursements}\n grossUpEnabled={grossUpEnabled}\n onGrossUpSelect={onGrossUpSelect}\n />\n {grossUpEnabled && (\n <GrossUpModal\n isOpen={isGrossUpModalOpen}\n onCalculateGrossUp={onCalculateGrossUp}\n isPending={isGrossUpPending}\n onApply={handleGrossUpApply}\n onCancel={() => {\n setIsGrossUpModalOpen(false)\n }}\n />\n )}\n </>\n )\n}\n"],"names":["isCalculating","processingRequest","PayrollProcessingRequestStatus","isCalculated","PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","withReimbursements","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","useBase","dateFormatter","useDateFormatter","isPolling","setIsPolling","useState","employeeDetails","employeeCompensations","paySchedule","payPeriod","isOffCycle","offCycleReason","pagination","isLoading","refetch","usePayrollConfigurationData","payrollData","usePayrollsGetSuspense","calculatePayroll","isCalculatingPayroll","usePayrollsCalculateMutation","updatePayroll","isUpdatingPayroll","usePayrollsUpdateMutation","calculateGrossUpMutation","isGrossUpPending","usePayrollsCalculateGrossUpMutation","grossUpEmployeeUuid","setGrossUpEmployeeUuid","isGrossUpModalOpen","setIsGrossUpModalOpen","grossUpEnabled","isGrossUpEligible","grossUpTargetCompensation","getGrossUpTargetCompensationName","onGrossUpSelect","employeeUuid","componentEvents","onCalculateGrossUp","netPay","grossUp","onGrossUpApply","grossAmount","employeeComp","ec","existingFixed","hasTargetCompensation","fc","updatedFixedCompensations","primaryJobUuid","updatedHourlyCompensations","hc","updatedPaidTimeOff","pto","transformedCompensation","transformEmployeeCompensation","result","handleGrossUpApply","blockersData","usePayrollsGetBlockersSuspense","blockersFromApi","blocker","payrollBlockers","setPayrollBlockers","onCalculatePayroll","payrollSubmitHandler","onEdit","employee","paymentMethod","reimbursements","compensation","onToggleExclude","employeeCompensation","onViewBlockers","useEffect","payrollAlert","jsxs","Fragment","PayrollConfigurationPresentation","GrossUpModal"],"mappings":"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"}
1
+ {"version":3,"file":"PayrollConfiguration.js","sources":["../../../../src/components/Payroll/PayrollConfiguration/PayrollConfiguration.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from 'react'\nimport { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrollsGet'\nimport { usePayrollsCalculateMutation } from '@gusto/embedded-api/react-query/payrollsCalculate'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type { PayrollProcessingRequest } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { PayrollProcessingRequestStatus } from '@gusto/embedded-api/models/components/payrollprocessingrequest'\nimport { useTranslation } from 'react-i18next'\nimport { usePayrollsUpdateMutation } from '@gusto/embedded-api/react-query/payrollsUpdate'\nimport { usePayrollsCalculateGrossUpMutation } from '@gusto/embedded-api/react-query/payrollsCalculateGrossUp'\nimport type { PayrollEmployeeCompensationsType } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollUpdateEmployeeCompensations } from '@gusto/embedded-api/models/components/payrollupdate'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { payrollSubmitHandler, type ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { GrossUpModal } from '../GrossUpModal'\nimport { PayrollConfigurationPresentation } from './PayrollConfigurationPresentation'\nimport { usePayrollConfigurationData } from './usePayrollConfigurationData'\nimport { getGrossUpTargetCompensationName, isGrossUpEligible } from './grossUpHelpers'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { BaseComponent } from '@/components/Base/Base'\nimport { componentEvents } from '@/shared/constants'\nimport { useComponentDictionary, useI18n } from '@/i18n'\nimport { useBase } from '@/components/Base'\nimport { useDateFormatter } from '@/hooks/useDateFormatter'\n\nconst isCalculating = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.Calculating\nconst isCalculated = (processingRequest?: PayrollProcessingRequest | null) =>\n processingRequest?.status === PayrollProcessingRequestStatus.CalculateSuccess\n\ninterface PayrollConfigurationProps extends BaseComponentInterface<'Payroll.PayrollConfiguration'> {\n companyId: string\n payrollId: string\n alerts?: ReactNode\n withReimbursements?: boolean\n}\n\nexport function PayrollConfiguration(props: PayrollConfigurationProps & BaseComponentInterface) {\n return (\n <BaseComponent {...props}>\n <Root {...props}>{props.children}</Root>\n </BaseComponent>\n )\n}\n\nexport const Root = ({\n onEvent,\n companyId,\n payrollId,\n dictionary,\n alerts,\n withReimbursements = true,\n}: PayrollConfigurationProps) => {\n useComponentDictionary('Payroll.PayrollConfiguration', dictionary)\n useI18n('Payroll.PayrollConfiguration')\n const { t } = useTranslation('Payroll.PayrollConfiguration')\n const { baseSubmitHandler } = useBase()\n const dateFormatter = useDateFormatter()\n\n const [isPolling, setIsPolling] = useState(false)\n\n const {\n employeeDetails,\n employeeCompensations,\n paySchedule,\n payPeriod,\n isOffCycle,\n offCycleReason,\n pagination,\n isLoading,\n refetch,\n } = usePayrollConfigurationData({\n companyId,\n payrollId,\n })\n\n const { data: payrollData } = usePayrollsGetSuspense(\n {\n companyId,\n payrollId,\n include: ['taxes', 'benefits', 'deductions', 'payroll_status_meta'],\n },\n { refetchInterval: isPolling ? 5_000 : false },\n )\n\n const { mutateAsync: calculatePayroll, isPending: isCalculatingPayroll } =\n usePayrollsCalculateMutation()\n\n const { mutateAsync: updatePayroll, isPending: isUpdatingPayroll } = usePayrollsUpdateMutation()\n\n const { mutateAsync: calculateGrossUpMutation, isPending: isGrossUpPending } =\n usePayrollsCalculateGrossUpMutation()\n\n const [grossUpEmployeeUuid, setGrossUpEmployeeUuid] = useState<string | null>(null)\n const [isGrossUpModalOpen, setIsGrossUpModalOpen] = useState(false)\n\n const grossUpEnabled = isGrossUpEligible(isOffCycle, offCycleReason)\n const grossUpTargetCompensation = getGrossUpTargetCompensationName(offCycleReason)\n\n const onGrossUpSelect = (employeeUuid: string) => {\n setGrossUpEmployeeUuid(employeeUuid)\n setIsGrossUpModalOpen(true)\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_SELECTED, { employeeUuid })\n }\n\n const onCalculateGrossUp = async (netPay: number): Promise<string | null> => {\n if (!grossUpEmployeeUuid) return null\n let grossUp: string | null = null\n\n await baseSubmitHandler(null, async () => {\n const result = await calculateGrossUpMutation({\n request: {\n payrollUuid: payrollId,\n payrollGrossUpRequest: {\n employeeUuid: grossUpEmployeeUuid,\n netPay: netPay.toString(),\n },\n },\n })\n\n grossUp = result.payrollGrossUpResponse?.grossUp ?? null\n\n if (grossUp) {\n onEvent(componentEvents.RUN_PAYROLL_GROSS_UP_CALCULATED, {\n grossUp,\n netPay,\n employeeUuid: grossUpEmployeeUuid,\n })\n }\n })\n\n return grossUp\n }\n\n const onGrossUpApply = async (grossAmount: string) => {\n if (!grossUpEmployeeUuid || !grossUpTargetCompensation) {\n throw new Error('Unable to apply gross-up: missing employee or target compensation.')\n }\n\n const employeeComp = employeeCompensations.find(ec => ec.employeeUuid === grossUpEmployeeUuid)\n if (!employeeComp) {\n throw new Error('Unable to apply gross-up: employee compensation not found.')\n }\n\n const existingFixed = employeeComp.fixedCompensations ?? []\n const hasTargetCompensation = existingFixed.some(\n fc => fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase(),\n )\n\n const updatedFixedCompensations = existingFixed.map(fc => ({\n name: fc.name,\n jobUuid: fc.jobUuid,\n amount:\n fc.name?.toLowerCase() === grossUpTargetCompensation.toLowerCase() ? grossAmount : '0',\n }))\n\n if (!hasTargetCompensation) {\n const primaryJobUuid =\n employeeComp.hourlyCompensations?.[0]?.jobUuid ?? existingFixed[0]?.jobUuid ?? ''\n updatedFixedCompensations.push({\n name: grossUpTargetCompensation,\n jobUuid: primaryJobUuid,\n amount: grossAmount,\n })\n }\n\n const updatedHourlyCompensations = (employeeComp.hourlyCompensations ?? []).map(hc => ({\n name: hc.name,\n jobUuid: hc.jobUuid,\n hours: '0',\n }))\n\n const updatedPaidTimeOff = (employeeComp.paidTimeOff ?? []).map(pto => ({\n name: pto.name,\n hours: '0',\n }))\n\n const transformedCompensation = transformEmployeeCompensation({\n ...employeeComp,\n fixedCompensations: updatedFixedCompensations,\n hourlyCompensations: updatedHourlyCompensations,\n paidTimeOff: updatedPaidTimeOff,\n })\n\n await baseSubmitHandler({}, async () => {\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [{ ...transformedCompensation, excluded: false }],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n\n setGrossUpEmployeeUuid(null)\n setIsGrossUpModalOpen(false)\n }\n\n const handleGrossUpApply = async (grossAmount: string) => {\n try {\n await onGrossUpApply(grossAmount)\n } catch {\n // Modal stays open; error is surfaced by baseSubmitHandler\n }\n }\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: companyId,\n })\n\n const payrollBlockerList = blockersData.payrollBlockers ?? []\n\n const blockersFromApi: ApiPayrollBlocker[] = payrollBlockerList.map(blocker => ({\n key: blocker.key,\n message: blocker.message,\n }))\n\n const [payrollBlockers, setPayrollBlockers] = useState<ApiPayrollBlocker[]>(blockersFromApi)\n\n const onCalculatePayroll = async () => {\n setPayrollBlockers([])\n\n await baseSubmitHandler({}, async () => {\n const result = await payrollSubmitHandler(async () => {\n await calculatePayroll({\n request: {\n companyId,\n payrollId,\n },\n })\n setIsPolling(true)\n })\n\n if (!result.success && result.blockers.length > 0) {\n setPayrollBlockers(result.blockers)\n }\n })\n }\n\n const onEdit = (employee: Employee) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_EDIT, {\n employeeId: employee.uuid,\n firstName: employee.firstName,\n lastName: employee.lastName,\n })\n }\n\n const transformEmployeeCompensation = ({\n paymentMethod,\n reimbursements,\n ...compensation\n }: PayrollEmployeeCompensationsType): PayrollUpdateEmployeeCompensations => {\n return {\n ...compensation,\n ...(paymentMethod && paymentMethod !== 'Historical' ? { paymentMethod } : {}),\n memo: compensation.memo || undefined,\n }\n }\n\n const onToggleExclude = async (employeeCompensation: PayrollEmployeeCompensationsType) => {\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SKIP, {\n employeeId: employeeCompensation.employeeUuid,\n })\n await baseSubmitHandler({}, async () => {\n const transformedCompensation = transformEmployeeCompensation(employeeCompensation)\n const result = await updatePayroll({\n request: {\n companyId,\n payrollId,\n payrollUpdate: {\n employeeCompensations: [\n { ...transformedCompensation, excluded: !transformedCompensation.excluded },\n ],\n },\n },\n })\n onEvent(componentEvents.RUN_PAYROLL_EMPLOYEE_SAVED, {\n payrollPrepared: result.payrollPrepared,\n })\n await refetch()\n })\n }\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n useEffect(() => {\n if (isCalculating(payrollData.payrollShow?.processingRequest) && !isPolling) {\n setIsPolling(true)\n }\n if (isPolling && isCalculated(payrollData.payrollShow?.processingRequest)) {\n onEvent(componentEvents.RUN_PAYROLL_CALCULATED, {\n payrollId,\n alert: {\n type: 'success',\n title: t('alerts.progressSaved'),\n alertKey: 'progressSaved',\n },\n payPeriod: payrollData.payrollShow?.payPeriod,\n })\n setPayrollBlockers([])\n setIsPolling(false)\n }\n if (\n isPolling &&\n payrollData.payrollShow?.processingRequest?.status ===\n PayrollProcessingRequestStatus.ProcessingFailed\n ) {\n onEvent(componentEvents.RUN_PAYROLL_PROCESSING_FAILED)\n setIsPolling(false)\n }\n }, [payrollData.payrollShow?.processingRequest, isPolling, onEvent, t, payrollId])\n\n const payrollAlert =\n payrollData.payrollShow?.payrollStatusMeta?.payrollLate &&\n payrollData.payrollShow.payrollStatusMeta.initialCheckDate &&\n payrollData.payrollShow.payrollStatusMeta.expectedDebitTime &&\n payrollData.payrollShow.payrollStatusMeta.expectedCheckDate\n ? {\n label: t('alerts.payrollLate', {\n initialCheckDate: dateFormatter.formatShortWithWeekday(\n payrollData.payrollShow.payrollStatusMeta.initialCheckDate,\n ),\n }),\n content: t('alerts.payrollLateText', {\n ...dateFormatter.formatWithTime(\n payrollData.payrollShow.payrollStatusMeta.expectedDebitTime,\n ),\n newCheckDate: dateFormatter.formatShortWithWeekday(\n payrollData.payrollShow.payrollStatusMeta.expectedCheckDate,\n ),\n }),\n variant: 'warning' as const,\n }\n : payrollData.payrollShow\n ? {\n label: t('alerts.directDepositDeadline', {\n payDate: dateFormatter.formatShortWithWeekday(payrollData.payrollShow.checkDate),\n ...dateFormatter.formatWithTime(payrollData.payrollShow.payrollDeadline),\n }),\n content: t('alerts.directDepositDeadlineText'),\n variant: 'info' as const,\n }\n : undefined\n\n return (\n <>\n <PayrollConfigurationPresentation\n onCalculatePayroll={onCalculatePayroll}\n isCalculateDisabled={blockersFromApi.length > 0}\n onEdit={onEdit}\n onToggleExclude={onToggleExclude}\n onViewBlockers={onViewBlockers}\n employeeCompensations={employeeCompensations}\n employeeDetails={employeeDetails}\n payPeriod={payPeriod}\n paySchedule={paySchedule}\n isOffCycle={isOffCycle}\n offCycleReason={offCycleReason}\n alerts={alerts}\n payrollAlert={payrollAlert}\n isPending={isPolling || isLoading || isUpdatingPayroll || isCalculatingPayroll}\n isCalculating={isCalculatingPayroll || isPolling}\n payrollBlockers={payrollBlockers}\n pagination={pagination}\n withReimbursements={withReimbursements}\n grossUpEnabled={grossUpEnabled}\n onGrossUpSelect={onGrossUpSelect}\n />\n {grossUpEnabled && (\n <GrossUpModal\n isOpen={isGrossUpModalOpen}\n onCalculateGrossUp={onCalculateGrossUp}\n isPending={isGrossUpPending}\n onApply={handleGrossUpApply}\n onCancel={() => {\n setIsGrossUpModalOpen(false)\n }}\n />\n )}\n </>\n )\n}\n"],"names":["isCalculating","processingRequest","PayrollProcessingRequestStatus","isCalculated","PayrollConfiguration","props","jsx","BaseComponent","Root","onEvent","companyId","payrollId","dictionary","alerts","withReimbursements","useComponentDictionary","useI18n","t","useTranslation","baseSubmitHandler","useBase","dateFormatter","useDateFormatter","isPolling","setIsPolling","useState","employeeDetails","employeeCompensations","paySchedule","payPeriod","isOffCycle","offCycleReason","pagination","isLoading","refetch","usePayrollConfigurationData","payrollData","usePayrollsGetSuspense","calculatePayroll","isCalculatingPayroll","usePayrollsCalculateMutation","updatePayroll","isUpdatingPayroll","usePayrollsUpdateMutation","calculateGrossUpMutation","isGrossUpPending","usePayrollsCalculateGrossUpMutation","grossUpEmployeeUuid","setGrossUpEmployeeUuid","isGrossUpModalOpen","setIsGrossUpModalOpen","grossUpEnabled","isGrossUpEligible","grossUpTargetCompensation","getGrossUpTargetCompensationName","onGrossUpSelect","employeeUuid","componentEvents","onCalculateGrossUp","netPay","grossUp","onGrossUpApply","grossAmount","employeeComp","ec","existingFixed","hasTargetCompensation","fc","updatedFixedCompensations","primaryJobUuid","updatedHourlyCompensations","hc","updatedPaidTimeOff","pto","transformedCompensation","transformEmployeeCompensation","result","handleGrossUpApply","blockersData","usePayrollsGetBlockersSuspense","blockersFromApi","blocker","payrollBlockers","setPayrollBlockers","onCalculatePayroll","payrollSubmitHandler","onEdit","employee","paymentMethod","reimbursements","compensation","onToggleExclude","employeeCompensation","onViewBlockers","useEffect","payrollAlert","jsxs","Fragment","PayrollConfigurationPresentation","GrossUpModal"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollEditEmployeePresentation.js","sources":["../../../../src/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.tsx"],"sourcesContent":["import { FormProvider, useForm, useWatch } from 'react-hook-form'\nimport { useMemo, useRef } from 'react'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type {\n FixedCompensations,\n PayrollEmployeeCompensationsType,\n} from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport { PayrollEmployeeCompensationsTypePaymentMethod } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollFixedCompensationTypesType } from '@gusto/embedded-api/models/components/payrollfixedcompensationtypestype'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport { useTranslation } from 'react-i18next'\nimport { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport styles from './PayrollEditEmployeePresentation.module.scss'\nimport { TimeOffField } from './TimeOffField'\nimport { Flex, Grid, TextInputField, RadioGroupField, NumberInputField } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { Form } from '@/components/Common/Form'\nimport { formatNumberAsCurrency, firstLastName } from '@/helpers/formattedStrings'\nimport {\n getAdditionalEarningsCompensations,\n getReimbursementCompensation,\n calculateGrossPay,\n} from '@/components/Payroll/helpers'\nimport {\n COMPENSATION_NAME_DOUBLE_OVERTIME,\n COMPENSATION_NAME_OVERTIME,\n COMPENSATION_NAME_REGULAR_HOURS,\n HOURS_COMPENSATION_NAMES,\n EXCLUDED_ADDITIONAL_EARNINGS,\n COMPENSATION_NAME_REIMBURSEMENT,\n COMPENSATION_NAME_BONUS,\n COMPENSATION_NAME_PAYCHECK_TIPS,\n COMPENSATION_NAME_CORRECTION_PAYMENT,\n COMPENSATION_NAME_COMMISSION,\n COMPENSATION_NAME_CASH_TIPS,\n} from '@/shared/constants'\nimport useContainerBreakpoints from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\n\ninterface PayrollEditEmployeeProps {\n onSave: (updatedCompensation: PayrollEmployeeCompensationsType) => void\n onCancel: () => void\n employee: Employee\n employeeCompensation?: PayrollEmployeeCompensationsType\n isPending?: boolean\n fixedCompensationTypes: PayrollFixedCompensationTypesType[]\n payPeriodStartDate?: string\n paySchedule?: PayScheduleObject\n isOffCycle?: boolean\n withReimbursements?: boolean\n hasDirectDepositSetup?: boolean\n}\n\nexport const PayrollEditEmployeeFormSchema = z.object({\n hourlyCompensations: z.record(z.string(), z.record(z.string(), z.string().optional())),\n timeOffCompensations: z.record(z.string(), z.string().optional()),\n fixedCompensations: z.record(z.string(), z.number().optional()),\n paymentMethod: z.enum(PayrollEmployeeCompensationsTypePaymentMethod).optional(),\n})\n\nexport type PayrollEditEmployeeFormValues = z.infer<typeof PayrollEditEmployeeFormSchema>\n\nconst buildCompensationFromFormData = (\n formData: PayrollEditEmployeeFormValues,\n employeeCompensation: PayrollEmployeeCompensationsType | undefined,\n timeOff: Array<{ name?: string; hours?: string }>,\n primaryJobUuid?: string,\n): PayrollEmployeeCompensationsType => {\n const updatedCompensation = {\n ...employeeCompensation,\n paymentMethod: formData.paymentMethod,\n }\n\n updatedCompensation.hourlyCompensations = employeeCompensation?.hourlyCompensations?.map(\n compensation => {\n const hours =\n compensation.jobUuid && compensation.name\n ? formData.hourlyCompensations[compensation.jobUuid]?.[compensation.name]\n : undefined\n return hours\n ? {\n ...compensation,\n hours,\n }\n : compensation\n },\n )\n\n updatedCompensation.paidTimeOff = timeOff.map(timeOffEntry => {\n return {\n ...timeOffEntry,\n hours: formData.timeOffCompensations[timeOffEntry.name!],\n }\n })\n\n const updatedFixedCompensations: FixedCompensations[] = []\n\n Object.entries(formData.fixedCompensations).forEach(([fixedCompensationName, formAmount]) => {\n const existingFixedCompensation = employeeCompensation?.fixedCompensations?.find(\n fixedCompensation =>\n fixedCompensation.name?.toLowerCase() === fixedCompensationName.toLowerCase(),\n )\n\n if (formAmount !== undefined) {\n const amountAsString = formAmount.toString()\n if (existingFixedCompensation) {\n updatedFixedCompensations.push({\n name: existingFixedCompensation.name,\n jobUuid: existingFixedCompensation.jobUuid,\n amount: amountAsString,\n })\n } else if (formAmount !== 0) {\n updatedFixedCompensations.push({\n name: fixedCompensationName,\n jobUuid: primaryJobUuid,\n amount: amountAsString,\n })\n }\n }\n })\n\n updatedCompensation.fixedCompensations = updatedFixedCompensations\n\n return updatedCompensation\n}\n\nexport const PayrollEditEmployeePresentation = ({\n onSave,\n onCancel,\n employee,\n employeeCompensation,\n isPending = false,\n fixedCompensationTypes,\n payPeriodStartDate,\n paySchedule,\n isOffCycle = false,\n withReimbursements = true,\n hasDirectDepositSetup = true,\n}: PayrollEditEmployeeProps) => {\n const { Button, Heading, Text } = useComponentContext()\n\n const { t } = useTranslation('Payroll.PayrollEditEmployee')\n useI18n('Payroll.PayrollEditEmployee')\n\n const primaryJob = employee.jobs?.find(job => job.primary)\n const hourlyJobs = primaryJob ? [primaryJob] : []\n\n const containerRef = useRef<HTMLDivElement>(null)\n const breakpoints = useContainerBreakpoints({\n ref: containerRef,\n })\n const isSmallOrGreater = breakpoints.includes('small')\n\n employeeCompensation?.hourlyCompensations?.forEach(compensation => {\n const job = employee.jobs?.find(job => job.uuid === compensation.jobUuid)\n if (job && !hourlyJobs.find(hourlyJob => hourlyJob.uuid === job.uuid)) {\n hourlyJobs.push(job)\n }\n })\n\n const timeOff = (employeeCompensation?.paidTimeOff || []).filter(entry => entry.name)\n\n const additionalEarnings = getAdditionalEarningsCompensations({\n flsaStatus: primaryJob?.compensations?.[0]?.flsaStatus,\n existingFixedCompensations: employeeCompensation?.fixedCompensations || [],\n primaryJobUuid: primaryJob?.uuid,\n fixedCompensationTypes,\n excludedTypes: EXCLUDED_ADDITIONAL_EARNINGS,\n })\n\n const reimbursement = withReimbursements\n ? getReimbursementCompensation(\n employeeCompensation?.fixedCompensations || [],\n fixedCompensationTypes,\n primaryJob?.uuid,\n )\n : null\n\n const findMatchingCompensation = (jobUuid: string, compensationName: string) => {\n return employeeCompensation?.hourlyCompensations?.find(\n compensation =>\n compensation.jobUuid === jobUuid &&\n compensation.name?.toLowerCase() === compensationName.toLowerCase(),\n )\n }\n\n const getCompensationLabel = (compensationName?: string) => {\n switch (compensationName) {\n case COMPENSATION_NAME_REGULAR_HOURS:\n return t('compensationNames.regularHours')\n case COMPENSATION_NAME_OVERTIME:\n return t('compensationNames.overtime')\n case COMPENSATION_NAME_DOUBLE_OVERTIME:\n return t('compensationNames.doubleOvertime')\n default:\n return compensationName\n }\n }\n\n const getFixedCompensationLabel = (compensationName?: string) => {\n switch (compensationName) {\n case COMPENSATION_NAME_BONUS:\n return t('fixedCompensationNames.bonus')\n case COMPENSATION_NAME_PAYCHECK_TIPS:\n return t('fixedCompensationNames.paycheckTips')\n case COMPENSATION_NAME_CORRECTION_PAYMENT:\n return t('fixedCompensationNames.correctionPayment')\n case COMPENSATION_NAME_COMMISSION:\n return t('fixedCompensationNames.commission')\n case COMPENSATION_NAME_CASH_TIPS:\n return t('fixedCompensationNames.cashTips')\n case COMPENSATION_NAME_REIMBURSEMENT:\n return t('fixedCompensationNames.reimbursement')\n default:\n return compensationName\n }\n }\n\n const defaultValues = {\n hourlyCompensations: (() => {\n const hourlyCompensations: PayrollEditEmployeeFormValues['hourlyCompensations'] = {}\n\n hourlyJobs.forEach(hourlyJob => {\n HOURS_COMPENSATION_NAMES.forEach(compensationName => {\n const matchingCompensation = findMatchingCompensation(hourlyJob.uuid, compensationName)\n if (matchingCompensation) {\n if (!hourlyCompensations[hourlyJob.uuid]) {\n hourlyCompensations[hourlyJob.uuid] = {}\n }\n hourlyCompensations[hourlyJob.uuid]![matchingCompensation.name!] =\n matchingCompensation.hours ? parseFloat(matchingCompensation.hours).toString() : ''\n }\n })\n })\n\n return hourlyCompensations\n })(),\n\n timeOffCompensations: (() => {\n const timeOffCompensations: PayrollEditEmployeeFormValues['timeOffCompensations'] = {}\n\n timeOff.forEach(timeOffCompensation => {\n timeOffCompensations[timeOffCompensation.name!] = timeOffCompensation.hours\n ? parseFloat(timeOffCompensation.hours).toString()\n : ''\n })\n\n return timeOffCompensations\n })(),\n\n fixedCompensations: (() => {\n const fixedCompensations: PayrollEditEmployeeFormValues['fixedCompensations'] = {}\n\n additionalEarnings.forEach(fixedComp => {\n fixedCompensations[fixedComp.name!] = fixedComp.amount\n ? parseFloat(fixedComp.amount)\n : undefined\n })\n\n if (reimbursement) {\n fixedCompensations[reimbursement.name!] = reimbursement.amount\n ? parseFloat(reimbursement.amount)\n : undefined\n }\n\n return fixedCompensations\n })(),\n\n paymentMethod:\n employeeCompensation?.paymentMethod ||\n PayrollEmployeeCompensationsTypePaymentMethod.DirectDeposit,\n }\n\n const formHandlers = useForm<PayrollEditEmployeeFormValues>({\n resolver: zodResolver(PayrollEditEmployeeFormSchema),\n defaultValues,\n })\n\n const watchedFormData = useWatch({\n control: formHandlers.control,\n })\n\n const currentGrossPay = useMemo(() => {\n try {\n // Build form data, filtering out undefined nested objects\n const hourlyCompensations: Record<string, Record<string, string | undefined>> = {}\n if (watchedFormData.hourlyCompensations) {\n Object.entries(watchedFormData.hourlyCompensations).forEach(([jobId, compensations]) => {\n if (compensations) {\n hourlyCompensations[jobId] = compensations\n }\n })\n }\n\n const formDataWithDefaults: PayrollEditEmployeeFormValues = {\n hourlyCompensations,\n timeOffCompensations: watchedFormData.timeOffCompensations || {},\n fixedCompensations: watchedFormData.fixedCompensations || {},\n paymentMethod: watchedFormData.paymentMethod,\n }\n\n const updatedCompensation = buildCompensationFromFormData(\n formDataWithDefaults,\n employeeCompensation,\n (employeeCompensation?.paidTimeOff || []).filter(entry => entry.name),\n primaryJob?.uuid,\n )\n\n return calculateGrossPay(\n updatedCompensation,\n employee,\n payPeriodStartDate,\n paySchedule,\n isOffCycle,\n )\n } catch {\n // Fallback to original compensation on error\n return employeeCompensation\n ? calculateGrossPay(\n employeeCompensation,\n employee,\n payPeriodStartDate,\n paySchedule,\n isOffCycle,\n )\n : 0\n }\n }, [\n watchedFormData,\n employeeCompensation,\n primaryJob?.uuid,\n employee,\n payPeriodStartDate,\n paySchedule,\n isOffCycle,\n ])\n\n const employeeName = firstLastName({\n first_name: employee.firstName,\n last_name: employee.lastName,\n })\n\n const onSubmit = (data: PayrollEditEmployeeFormValues) => {\n const updatedCompensation = buildCompensationFromFormData(\n data,\n employeeCompensation,\n timeOff,\n primaryJob?.uuid,\n )\n onSave(updatedCompensation)\n }\n\n const formattedCurrentGrossPay = formatNumberAsCurrency(currentGrossPay || 0)\n\n const actions = (\n <Flex\n flexDirection={isSmallOrGreater ? 'row' : 'column'}\n justifyContent={isSmallOrGreater ? 'flex-end' : 'normal'}\n alignItems={isSmallOrGreater ? 'flex-start' : 'stretch'}\n gap={12}\n >\n <Button variant=\"secondary\" onClick={onCancel} title={t('cancelCta')}>\n {t('cancelCta')}\n </Button>\n <Button\n onClick={formHandlers.handleSubmit(onSubmit)}\n title={t('saveCta')}\n isLoading={isPending}\n >\n {t('saveCta')}\n </Button>\n </Flex>\n )\n\n return (\n <div ref={containerRef} className={styles.container}>\n <div\n className={`${styles.headerSection} ${!isSmallOrGreater ? styles.headerSectionSticky : ''}`}\n >\n <Flex justifyContent=\"space-between\">\n <Flex flexDirection=\"column\" gap={isSmallOrGreater ? 8 : 2}>\n <Heading as=\"h1\" styledAs={isSmallOrGreater ? 'h2' : 'h4'}>\n {t('pageTitle', { employeeName })}\n </Heading>\n {isSmallOrGreater ? (\n <Flex flexDirection=\"column\" gap={6}>\n <Heading as=\"h2\" styledAs=\"h3\">\n {formattedCurrentGrossPay}\n </Heading>\n <Text className={styles.grossPayLabel}>{t('grossPayLabel')}</Text>\n </Flex>\n ) : (\n <Heading as=\"h2\" styledAs=\"h6\" className={styles.grossPayLabel}>\n {t('grossPayLabelMobile', { grossPay: formattedCurrentGrossPay })}\n </Heading>\n )}\n </Flex>\n {isSmallOrGreater && actions}\n </Flex>\n </div>\n <FormProvider {...formHandlers}>\n <Form>\n {hourlyJobs.length > 0 && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h3\">{t('regularHoursTitle')}</Heading>\n {hourlyJobs.map(hourlyJob => (\n <Flex key={hourlyJob.uuid} flexDirection=\"column\" gap={8}>\n {hourlyJobs.length > 1 && <Heading as=\"h4\">{hourlyJob.title}</Heading>}\n <Grid gridTemplateColumns={{ base: '1fr', small: [320, 320] }} gap={20}>\n {HOURS_COMPENSATION_NAMES.map(compensationName => {\n const employeeHourlyCompensation = findMatchingCompensation(\n hourlyJob.uuid,\n compensationName,\n )\n if (employeeHourlyCompensation) {\n return (\n <TextInputField\n key={compensationName}\n type=\"number\"\n min={0}\n adornmentEnd={t('hoursUnit')}\n isRequired\n label={getCompensationLabel(compensationName)}\n name={`hourlyCompensations.${hourlyJob.uuid}.${employeeHourlyCompensation.name}`}\n />\n )\n }\n })}\n </Grid>\n </Flex>\n ))}\n </div>\n )}\n {timeOff.length > 0 && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('timeOffTitle')}</Heading>\n <Grid gridTemplateColumns={{ base: '1fr', small: [320, 320] }} gap={20}>\n {timeOff.map(timeOffEntry => (\n <TimeOffField\n key={timeOffEntry.name}\n timeOff={timeOffEntry}\n employee={employee}\n />\n ))}\n </Grid>\n </div>\n )}\n {additionalEarnings.length > 0 && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('additionalEarningsTitle')}</Heading>\n <Grid\n gridTemplateColumns={{ base: '1fr', small: [320, 320], large: [320, 320, 320] }}\n gap={20}\n >\n {additionalEarnings.map(fixedCompensation => (\n <NumberInputField\n key={fixedCompensation.name}\n format=\"currency\"\n min={0}\n isRequired\n label={getFixedCompensationLabel(fixedCompensation.name)}\n name={`fixedCompensations.${fixedCompensation.name}`}\n />\n ))}\n </Grid>\n </div>\n )}\n {reimbursement && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('reimbursementTitle')}</Heading>\n <Grid gridTemplateColumns={{ base: '1fr', small: [320, 320] }} gap={20}>\n <NumberInputField\n format=\"currency\"\n min={0}\n isRequired\n label={getFixedCompensationLabel(reimbursement.name)}\n name={`fixedCompensations.${reimbursement.name}`}\n />\n </Grid>\n </div>\n )}\n {hasDirectDepositSetup && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('paymentMethodTitle')}</Heading>\n <RadioGroupField\n name=\"paymentMethod\"\n isRequired\n label={t('paymentMethodLabel')}\n description={t('paymentMethodDescription')}\n options={[\n {\n value: PayrollEmployeeCompensationsTypePaymentMethod.DirectDeposit,\n label: t('paymentMethodOptions.directDeposit'),\n },\n {\n value: PayrollEmployeeCompensationsTypePaymentMethod.Check,\n label: t('paymentMethodOptions.check'),\n },\n ]}\n />\n </div>\n )}\n </Form>\n {!isSmallOrGreater && actions}\n </FormProvider>\n </div>\n )\n}\n"],"names":["PayrollEditEmployeeFormSchema","z","PayrollEmployeeCompensationsTypePaymentMethod","buildCompensationFromFormData","formData","employeeCompensation","timeOff","primaryJobUuid","updatedCompensation","compensation","hours","timeOffEntry","updatedFixedCompensations","fixedCompensationName","formAmount","existingFixedCompensation","fixedCompensation","amountAsString","PayrollEditEmployeePresentation","onSave","onCancel","employee","isPending","fixedCompensationTypes","payPeriodStartDate","paySchedule","isOffCycle","withReimbursements","hasDirectDepositSetup","Button","Heading","Text","useComponentContext","useTranslation","useI18n","primaryJob","job","hourlyJobs","containerRef","useRef","isSmallOrGreater","useContainerBreakpoints","hourlyJob","entry","additionalEarnings","getAdditionalEarningsCompensations","EXCLUDED_ADDITIONAL_EARNINGS","reimbursement","getReimbursementCompensation","findMatchingCompensation","jobUuid","compensationName","getCompensationLabel","COMPENSATION_NAME_REGULAR_HOURS","COMPENSATION_NAME_OVERTIME","COMPENSATION_NAME_DOUBLE_OVERTIME","getFixedCompensationLabel","COMPENSATION_NAME_BONUS","COMPENSATION_NAME_PAYCHECK_TIPS","COMPENSATION_NAME_CORRECTION_PAYMENT","COMPENSATION_NAME_COMMISSION","COMPENSATION_NAME_CASH_TIPS","COMPENSATION_NAME_REIMBURSEMENT","defaultValues","hourlyCompensations","HOURS_COMPENSATION_NAMES","matchingCompensation","timeOffCompensations","timeOffCompensation","fixedCompensations","fixedComp","formHandlers","useForm","zodResolver","watchedFormData","useWatch","currentGrossPay","useMemo","jobId","compensations","formDataWithDefaults","calculateGrossPay","employeeName","firstLastName","onSubmit","data","formattedCurrentGrossPay","formatNumberAsCurrency","actions","jsxs","Flex","jsx","styles","FormProvider","Form","Grid","employeeHourlyCompensation","TextInputField","TimeOffField","NumberInputField","RadioGroupField"],"mappings":"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"}
1
+ {"version":3,"file":"PayrollEditEmployeePresentation.js","sources":["../../../../src/components/Payroll/PayrollEditEmployee/PayrollEditEmployeePresentation.tsx"],"sourcesContent":["import { FormProvider, useForm, useWatch } from 'react-hook-form'\nimport { useMemo, useRef } from 'react'\nimport type { Employee } from '@gusto/embedded-api/models/components/employee'\nimport type {\n PayrollEmployeeCompensationsTypeFixedCompensations as FixedCompensations,\n PayrollEmployeeCompensationsType,\n} from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport { PayrollEmployeeCompensationsTypePaymentMethod } from '@gusto/embedded-api/models/components/payrollemployeecompensationstype'\nimport type { PayrollFixedCompensationTypesType } from '@gusto/embedded-api/models/components/payrollfixedcompensationtypestype'\nimport type { PayScheduleObject } from '@gusto/embedded-api/models/components/payscheduleobject'\nimport { useTranslation } from 'react-i18next'\nimport { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport styles from './PayrollEditEmployeePresentation.module.scss'\nimport { TimeOffField } from './TimeOffField'\nimport { Flex, Grid, TextInputField, RadioGroupField, NumberInputField } from '@/components/Common'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { useI18n } from '@/i18n'\nimport { Form } from '@/components/Common/Form'\nimport { formatNumberAsCurrency, firstLastName } from '@/helpers/formattedStrings'\nimport {\n getAdditionalEarningsCompensations,\n getReimbursementCompensation,\n calculateGrossPay,\n} from '@/components/Payroll/helpers'\nimport {\n COMPENSATION_NAME_DOUBLE_OVERTIME,\n COMPENSATION_NAME_OVERTIME,\n COMPENSATION_NAME_REGULAR_HOURS,\n HOURS_COMPENSATION_NAMES,\n EXCLUDED_ADDITIONAL_EARNINGS,\n COMPENSATION_NAME_REIMBURSEMENT,\n COMPENSATION_NAME_BONUS,\n COMPENSATION_NAME_PAYCHECK_TIPS,\n COMPENSATION_NAME_CORRECTION_PAYMENT,\n COMPENSATION_NAME_COMMISSION,\n COMPENSATION_NAME_CASH_TIPS,\n} from '@/shared/constants'\nimport useContainerBreakpoints from '@/hooks/useContainerBreakpoints/useContainerBreakpoints'\n\ninterface PayrollEditEmployeeProps {\n onSave: (updatedCompensation: PayrollEmployeeCompensationsType) => void\n onCancel: () => void\n employee: Employee\n employeeCompensation?: PayrollEmployeeCompensationsType\n isPending?: boolean\n fixedCompensationTypes: PayrollFixedCompensationTypesType[]\n payPeriodStartDate?: string\n paySchedule?: PayScheduleObject\n isOffCycle?: boolean\n withReimbursements?: boolean\n hasDirectDepositSetup?: boolean\n}\n\nexport const PayrollEditEmployeeFormSchema = z.object({\n hourlyCompensations: z.record(z.string(), z.record(z.string(), z.string().optional())),\n timeOffCompensations: z.record(z.string(), z.string().optional()),\n fixedCompensations: z.record(z.string(), z.number().optional()),\n paymentMethod: z.enum(PayrollEmployeeCompensationsTypePaymentMethod).optional(),\n})\n\nexport type PayrollEditEmployeeFormValues = z.infer<typeof PayrollEditEmployeeFormSchema>\n\nconst buildCompensationFromFormData = (\n formData: PayrollEditEmployeeFormValues,\n employeeCompensation: PayrollEmployeeCompensationsType | undefined,\n timeOff: Array<{ name?: string; hours?: string }>,\n primaryJobUuid?: string,\n): PayrollEmployeeCompensationsType => {\n const updatedCompensation = {\n ...employeeCompensation,\n paymentMethod: formData.paymentMethod,\n }\n\n updatedCompensation.hourlyCompensations = employeeCompensation?.hourlyCompensations?.map(\n compensation => {\n const hours =\n compensation.jobUuid && compensation.name\n ? formData.hourlyCompensations[compensation.jobUuid]?.[compensation.name]\n : undefined\n return hours\n ? {\n ...compensation,\n hours,\n }\n : compensation\n },\n )\n\n updatedCompensation.paidTimeOff = timeOff.map(timeOffEntry => {\n return {\n ...timeOffEntry,\n hours: formData.timeOffCompensations[timeOffEntry.name!],\n }\n })\n\n const updatedFixedCompensations: FixedCompensations[] = []\n\n Object.entries(formData.fixedCompensations).forEach(([fixedCompensationName, formAmount]) => {\n const existingFixedCompensation = employeeCompensation?.fixedCompensations?.find(\n fixedCompensation =>\n fixedCompensation.name?.toLowerCase() === fixedCompensationName.toLowerCase(),\n )\n\n if (formAmount !== undefined) {\n const amountAsString = formAmount.toString()\n if (existingFixedCompensation) {\n updatedFixedCompensations.push({\n name: existingFixedCompensation.name,\n jobUuid: existingFixedCompensation.jobUuid,\n amount: amountAsString,\n })\n } else if (formAmount !== 0) {\n updatedFixedCompensations.push({\n name: fixedCompensationName,\n jobUuid: primaryJobUuid,\n amount: amountAsString,\n })\n }\n }\n })\n\n updatedCompensation.fixedCompensations = updatedFixedCompensations\n\n return updatedCompensation\n}\n\nexport const PayrollEditEmployeePresentation = ({\n onSave,\n onCancel,\n employee,\n employeeCompensation,\n isPending = false,\n fixedCompensationTypes,\n payPeriodStartDate,\n paySchedule,\n isOffCycle = false,\n withReimbursements = true,\n hasDirectDepositSetup = true,\n}: PayrollEditEmployeeProps) => {\n const { Button, Heading, Text } = useComponentContext()\n\n const { t } = useTranslation('Payroll.PayrollEditEmployee')\n useI18n('Payroll.PayrollEditEmployee')\n\n const primaryJob = employee.jobs?.find(job => job.primary)\n const hourlyJobs = primaryJob ? [primaryJob] : []\n\n const containerRef = useRef<HTMLDivElement>(null)\n const breakpoints = useContainerBreakpoints({\n ref: containerRef,\n })\n const isSmallOrGreater = breakpoints.includes('small')\n\n employeeCompensation?.hourlyCompensations?.forEach(compensation => {\n const job = employee.jobs?.find(job => job.uuid === compensation.jobUuid)\n if (job && !hourlyJobs.find(hourlyJob => hourlyJob.uuid === job.uuid)) {\n hourlyJobs.push(job)\n }\n })\n\n const timeOff = (employeeCompensation?.paidTimeOff || []).filter(entry => entry.name)\n\n const additionalEarnings = getAdditionalEarningsCompensations({\n flsaStatus: primaryJob?.compensations?.[0]?.flsaStatus,\n existingFixedCompensations: employeeCompensation?.fixedCompensations || [],\n primaryJobUuid: primaryJob?.uuid,\n fixedCompensationTypes,\n excludedTypes: EXCLUDED_ADDITIONAL_EARNINGS,\n })\n\n const reimbursement = withReimbursements\n ? getReimbursementCompensation(\n employeeCompensation?.fixedCompensations || [],\n fixedCompensationTypes,\n primaryJob?.uuid,\n )\n : null\n\n const findMatchingCompensation = (jobUuid: string, compensationName: string) => {\n return employeeCompensation?.hourlyCompensations?.find(\n compensation =>\n compensation.jobUuid === jobUuid &&\n compensation.name?.toLowerCase() === compensationName.toLowerCase(),\n )\n }\n\n const getCompensationLabel = (compensationName?: string) => {\n switch (compensationName) {\n case COMPENSATION_NAME_REGULAR_HOURS:\n return t('compensationNames.regularHours')\n case COMPENSATION_NAME_OVERTIME:\n return t('compensationNames.overtime')\n case COMPENSATION_NAME_DOUBLE_OVERTIME:\n return t('compensationNames.doubleOvertime')\n default:\n return compensationName\n }\n }\n\n const getFixedCompensationLabel = (compensationName?: string) => {\n switch (compensationName) {\n case COMPENSATION_NAME_BONUS:\n return t('fixedCompensationNames.bonus')\n case COMPENSATION_NAME_PAYCHECK_TIPS:\n return t('fixedCompensationNames.paycheckTips')\n case COMPENSATION_NAME_CORRECTION_PAYMENT:\n return t('fixedCompensationNames.correctionPayment')\n case COMPENSATION_NAME_COMMISSION:\n return t('fixedCompensationNames.commission')\n case COMPENSATION_NAME_CASH_TIPS:\n return t('fixedCompensationNames.cashTips')\n case COMPENSATION_NAME_REIMBURSEMENT:\n return t('fixedCompensationNames.reimbursement')\n default:\n return compensationName\n }\n }\n\n const defaultValues = {\n hourlyCompensations: (() => {\n const hourlyCompensations: PayrollEditEmployeeFormValues['hourlyCompensations'] = {}\n\n hourlyJobs.forEach(hourlyJob => {\n HOURS_COMPENSATION_NAMES.forEach(compensationName => {\n const matchingCompensation = findMatchingCompensation(hourlyJob.uuid, compensationName)\n if (matchingCompensation) {\n if (!hourlyCompensations[hourlyJob.uuid]) {\n hourlyCompensations[hourlyJob.uuid] = {}\n }\n hourlyCompensations[hourlyJob.uuid]![matchingCompensation.name!] =\n matchingCompensation.hours ? parseFloat(matchingCompensation.hours).toString() : ''\n }\n })\n })\n\n return hourlyCompensations\n })(),\n\n timeOffCompensations: (() => {\n const timeOffCompensations: PayrollEditEmployeeFormValues['timeOffCompensations'] = {}\n\n timeOff.forEach(timeOffCompensation => {\n timeOffCompensations[timeOffCompensation.name!] = timeOffCompensation.hours\n ? parseFloat(timeOffCompensation.hours).toString()\n : ''\n })\n\n return timeOffCompensations\n })(),\n\n fixedCompensations: (() => {\n const fixedCompensations: PayrollEditEmployeeFormValues['fixedCompensations'] = {}\n\n additionalEarnings.forEach(fixedComp => {\n fixedCompensations[fixedComp.name!] = fixedComp.amount\n ? parseFloat(fixedComp.amount)\n : undefined\n })\n\n if (reimbursement) {\n fixedCompensations[reimbursement.name!] = reimbursement.amount\n ? parseFloat(reimbursement.amount)\n : undefined\n }\n\n return fixedCompensations\n })(),\n\n paymentMethod:\n employeeCompensation?.paymentMethod ||\n PayrollEmployeeCompensationsTypePaymentMethod.DirectDeposit,\n }\n\n const formHandlers = useForm<PayrollEditEmployeeFormValues>({\n resolver: zodResolver(PayrollEditEmployeeFormSchema),\n defaultValues,\n })\n\n const watchedFormData = useWatch({\n control: formHandlers.control,\n })\n\n const currentGrossPay = useMemo(() => {\n try {\n // Build form data, filtering out undefined nested objects\n const hourlyCompensations: Record<string, Record<string, string | undefined>> = {}\n if (watchedFormData.hourlyCompensations) {\n Object.entries(watchedFormData.hourlyCompensations).forEach(([jobId, compensations]) => {\n if (compensations) {\n hourlyCompensations[jobId] = compensations\n }\n })\n }\n\n const formDataWithDefaults: PayrollEditEmployeeFormValues = {\n hourlyCompensations,\n timeOffCompensations: watchedFormData.timeOffCompensations || {},\n fixedCompensations: watchedFormData.fixedCompensations || {},\n paymentMethod: watchedFormData.paymentMethod,\n }\n\n const updatedCompensation = buildCompensationFromFormData(\n formDataWithDefaults,\n employeeCompensation,\n (employeeCompensation?.paidTimeOff || []).filter(entry => entry.name),\n primaryJob?.uuid,\n )\n\n return calculateGrossPay(\n updatedCompensation,\n employee,\n payPeriodStartDate,\n paySchedule,\n isOffCycle,\n )\n } catch {\n // Fallback to original compensation on error\n return employeeCompensation\n ? calculateGrossPay(\n employeeCompensation,\n employee,\n payPeriodStartDate,\n paySchedule,\n isOffCycle,\n )\n : 0\n }\n }, [\n watchedFormData,\n employeeCompensation,\n primaryJob?.uuid,\n employee,\n payPeriodStartDate,\n paySchedule,\n isOffCycle,\n ])\n\n const employeeName = firstLastName({\n first_name: employee.firstName,\n last_name: employee.lastName,\n })\n\n const onSubmit = (data: PayrollEditEmployeeFormValues) => {\n const updatedCompensation = buildCompensationFromFormData(\n data,\n employeeCompensation,\n timeOff,\n primaryJob?.uuid,\n )\n onSave(updatedCompensation)\n }\n\n const formattedCurrentGrossPay = formatNumberAsCurrency(currentGrossPay || 0)\n\n const actions = (\n <Flex\n flexDirection={isSmallOrGreater ? 'row' : 'column'}\n justifyContent={isSmallOrGreater ? 'flex-end' : 'normal'}\n alignItems={isSmallOrGreater ? 'flex-start' : 'stretch'}\n gap={12}\n >\n <Button variant=\"secondary\" onClick={onCancel} title={t('cancelCta')}>\n {t('cancelCta')}\n </Button>\n <Button\n onClick={formHandlers.handleSubmit(onSubmit)}\n title={t('saveCta')}\n isLoading={isPending}\n >\n {t('saveCta')}\n </Button>\n </Flex>\n )\n\n return (\n <div ref={containerRef} className={styles.container}>\n <div\n className={`${styles.headerSection} ${!isSmallOrGreater ? styles.headerSectionSticky : ''}`}\n >\n <Flex justifyContent=\"space-between\">\n <Flex flexDirection=\"column\" gap={isSmallOrGreater ? 8 : 2}>\n <Heading as=\"h1\" styledAs={isSmallOrGreater ? 'h2' : 'h4'}>\n {t('pageTitle', { employeeName })}\n </Heading>\n {isSmallOrGreater ? (\n <Flex flexDirection=\"column\" gap={6}>\n <Heading as=\"h2\" styledAs=\"h3\">\n {formattedCurrentGrossPay}\n </Heading>\n <Text className={styles.grossPayLabel}>{t('grossPayLabel')}</Text>\n </Flex>\n ) : (\n <Heading as=\"h2\" styledAs=\"h6\" className={styles.grossPayLabel}>\n {t('grossPayLabelMobile', { grossPay: formattedCurrentGrossPay })}\n </Heading>\n )}\n </Flex>\n {isSmallOrGreater && actions}\n </Flex>\n </div>\n <FormProvider {...formHandlers}>\n <Form>\n {hourlyJobs.length > 0 && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h3\">{t('regularHoursTitle')}</Heading>\n {hourlyJobs.map(hourlyJob => (\n <Flex key={hourlyJob.uuid} flexDirection=\"column\" gap={8}>\n {hourlyJobs.length > 1 && <Heading as=\"h4\">{hourlyJob.title}</Heading>}\n <Grid gridTemplateColumns={{ base: '1fr', small: [320, 320] }} gap={20}>\n {HOURS_COMPENSATION_NAMES.map(compensationName => {\n const employeeHourlyCompensation = findMatchingCompensation(\n hourlyJob.uuid,\n compensationName,\n )\n if (employeeHourlyCompensation) {\n return (\n <TextInputField\n key={compensationName}\n type=\"number\"\n min={0}\n adornmentEnd={t('hoursUnit')}\n isRequired\n label={getCompensationLabel(compensationName)}\n name={`hourlyCompensations.${hourlyJob.uuid}.${employeeHourlyCompensation.name}`}\n />\n )\n }\n })}\n </Grid>\n </Flex>\n ))}\n </div>\n )}\n {timeOff.length > 0 && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('timeOffTitle')}</Heading>\n <Grid gridTemplateColumns={{ base: '1fr', small: [320, 320] }} gap={20}>\n {timeOff.map(timeOffEntry => (\n <TimeOffField\n key={timeOffEntry.name}\n timeOff={timeOffEntry}\n employee={employee}\n />\n ))}\n </Grid>\n </div>\n )}\n {additionalEarnings.length > 0 && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('additionalEarningsTitle')}</Heading>\n <Grid\n gridTemplateColumns={{ base: '1fr', small: [320, 320], large: [320, 320, 320] }}\n gap={20}\n >\n {additionalEarnings.map(fixedCompensation => (\n <NumberInputField\n key={fixedCompensation.name}\n format=\"currency\"\n min={0}\n isRequired\n label={getFixedCompensationLabel(fixedCompensation.name)}\n name={`fixedCompensations.${fixedCompensation.name}`}\n />\n ))}\n </Grid>\n </div>\n )}\n {reimbursement && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('reimbursementTitle')}</Heading>\n <Grid gridTemplateColumns={{ base: '1fr', small: [320, 320] }} gap={20}>\n <NumberInputField\n format=\"currency\"\n min={0}\n isRequired\n label={getFixedCompensationLabel(reimbursement.name)}\n name={`fixedCompensations.${reimbursement.name}`}\n />\n </Grid>\n </div>\n )}\n {hasDirectDepositSetup && (\n <div className={styles.fieldGroup}>\n <Heading as=\"h4\">{t('paymentMethodTitle')}</Heading>\n <RadioGroupField\n name=\"paymentMethod\"\n isRequired\n label={t('paymentMethodLabel')}\n description={t('paymentMethodDescription')}\n options={[\n {\n value: PayrollEmployeeCompensationsTypePaymentMethod.DirectDeposit,\n label: t('paymentMethodOptions.directDeposit'),\n },\n {\n value: PayrollEmployeeCompensationsTypePaymentMethod.Check,\n label: t('paymentMethodOptions.check'),\n },\n ]}\n />\n </div>\n )}\n </Form>\n {!isSmallOrGreater && actions}\n </FormProvider>\n </div>\n )\n}\n"],"names":["PayrollEditEmployeeFormSchema","z","PayrollEmployeeCompensationsTypePaymentMethod","buildCompensationFromFormData","formData","employeeCompensation","timeOff","primaryJobUuid","updatedCompensation","compensation","hours","timeOffEntry","updatedFixedCompensations","fixedCompensationName","formAmount","existingFixedCompensation","fixedCompensation","amountAsString","PayrollEditEmployeePresentation","onSave","onCancel","employee","isPending","fixedCompensationTypes","payPeriodStartDate","paySchedule","isOffCycle","withReimbursements","hasDirectDepositSetup","Button","Heading","Text","useComponentContext","useTranslation","useI18n","primaryJob","job","hourlyJobs","containerRef","useRef","isSmallOrGreater","useContainerBreakpoints","hourlyJob","entry","additionalEarnings","getAdditionalEarningsCompensations","EXCLUDED_ADDITIONAL_EARNINGS","reimbursement","getReimbursementCompensation","findMatchingCompensation","jobUuid","compensationName","getCompensationLabel","COMPENSATION_NAME_REGULAR_HOURS","COMPENSATION_NAME_OVERTIME","COMPENSATION_NAME_DOUBLE_OVERTIME","getFixedCompensationLabel","COMPENSATION_NAME_BONUS","COMPENSATION_NAME_PAYCHECK_TIPS","COMPENSATION_NAME_CORRECTION_PAYMENT","COMPENSATION_NAME_COMMISSION","COMPENSATION_NAME_CASH_TIPS","COMPENSATION_NAME_REIMBURSEMENT","defaultValues","hourlyCompensations","HOURS_COMPENSATION_NAMES","matchingCompensation","timeOffCompensations","timeOffCompensation","fixedCompensations","fixedComp","formHandlers","useForm","zodResolver","watchedFormData","useWatch","currentGrossPay","useMemo","jobId","compensations","formDataWithDefaults","calculateGrossPay","employeeName","firstLastName","onSubmit","data","formattedCurrentGrossPay","formatNumberAsCurrency","actions","jsxs","Flex","jsx","styles","FormProvider","Form","Grid","employeeHourlyCompensation","TextInputField","TimeOffField","NumberInputField","RadioGroupField"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsDO,MAAMA,KAAgCC,EAAE,OAAO;AAAA,EACpD,qBAAqBA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,OAAA,EAAS,SAAA,CAAU,CAAC;AAAA,EACrF,sBAAsBA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,SAAS,UAAU;AAAA,EAChE,oBAAoBA,EAAE,OAAOA,EAAE,OAAA,GAAUA,EAAE,SAAS,UAAU;AAAA,EAC9D,eAAeA,EAAE,KAAKC,CAA6C,EAAE,SAAA;AACvE,CAAC,GAIKC,IAAgC,CACpCC,GACAC,GACAC,GACAC,MACqC;AACrC,QAAMC,IAAsB;AAAA,IAC1B,GAAGH;AAAA,IACH,eAAeD,EAAS;AAAA,EAAA;AAG1B,EAAAI,EAAoB,sBAAsBH,GAAsB,qBAAqB;AAAA,IACnF,CAAAI,MAAgB;AACd,YAAMC,IACJD,EAAa,WAAWA,EAAa,OACjCL,EAAS,oBAAoBK,EAAa,OAAO,IAAIA,EAAa,IAAI,IACtE;AACN,aAAOC,IACH;AAAA,QACE,GAAGD;AAAA,QACH,OAAAC;AAAA,MAAA,IAEFD;AAAA,IACN;AAAA,EAAA,GAGFD,EAAoB,cAAcF,EAAQ,IAAI,CAAAK,OACrC;AAAA,IACL,GAAGA;AAAA,IACH,OAAOP,EAAS,qBAAqBO,EAAa,IAAK;AAAA,EAAA,EAE1D;AAED,QAAMC,IAAkD,CAAA;AAExD,gBAAO,QAAQR,EAAS,kBAAkB,EAAE,QAAQ,CAAC,CAACS,GAAuBC,CAAU,MAAM;AAC3F,UAAMC,IAA4BV,GAAsB,oBAAoB;AAAA,MAC1E,OACEW,EAAkB,MAAM,YAAA,MAAkBH,EAAsB,YAAA;AAAA,IAAY;AAGhF,QAAIC,MAAe,QAAW;AAC5B,YAAMG,IAAiBH,EAAW,SAAA;AAClC,MAAIC,IACFH,EAA0B,KAAK;AAAA,QAC7B,MAAMG,EAA0B;AAAA,QAChC,SAASA,EAA0B;AAAA,QACnC,QAAQE;AAAA,MAAA,CACT,IACQH,MAAe,KACxBF,EAA0B,KAAK;AAAA,QAC7B,MAAMC;AAAA,QACN,SAASN;AAAA,QACT,QAAQU;AAAA,MAAA,CACT;AAAA,IAEL;AAAA,EACF,CAAC,GAEDT,EAAoB,qBAAqBI,GAElCJ;AACT,GAEaU,KAAkC,CAAC;AAAA,EAC9C,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,sBAAAhB;AAAA,EACA,WAAAiB,IAAY;AAAA,EACZ,wBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,oBAAAC,IAAqB;AAAA,EACrB,uBAAAC,IAAwB;AAC1B,MAAgC;AAC9B,QAAM,EAAE,QAAAC,GAAQ,SAAAC,GAAS,MAAAC,EAAA,IAASC,GAAA,GAE5B,EAAE,EAAA,IAAMC,GAAe,6BAA6B;AAC1D,EAAAC,GAAQ,6BAA6B;AAErC,QAAMC,IAAad,EAAS,MAAM,KAAK,CAAAe,MAAOA,EAAI,OAAO,GACnDC,IAAaF,IAAa,CAACA,CAAU,IAAI,CAAA,GAEzCG,IAAeC,EAAuB,IAAI,GAI1CC,IAHcC,GAAwB;AAAA,IAC1C,KAAKH;AAAA,EAAA,CACN,EACoC,SAAS,OAAO;AAErD,EAAAjC,GAAsB,qBAAqB,QAAQ,CAAAI,MAAgB;AACjE,UAAM2B,IAAMf,EAAS,MAAM,KAAK,CAAAe,MAAOA,EAAI,SAAS3B,EAAa,OAAO;AACxE,IAAI2B,KAAO,CAACC,EAAW,KAAK,OAAaK,EAAU,SAASN,EAAI,IAAI,KAClEC,EAAW,KAAKD,CAAG;AAAA,EAEvB,CAAC;AAED,QAAM9B,KAAWD,GAAsB,eAAe,CAAA,GAAI,OAAO,CAAAsC,MAASA,EAAM,IAAI,GAE9EC,IAAqBC,GAAmC;AAAA,IAC5D,YAAYV,GAAY,gBAAgB,CAAC,GAAG;AAAA,IAC5C,4BAA4B9B,GAAsB,sBAAsB,CAAA;AAAA,IACxE,gBAAgB8B,GAAY;AAAA,IAC5B,wBAAAZ;AAAA,IACA,eAAeuB;AAAA,EAAA,CAChB,GAEKC,IAAgBpB,IAClBqB;AAAA,IACE3C,GAAsB,sBAAsB,CAAA;AAAA,IAC5CkB;AAAA,IACAY,GAAY;AAAA,EAAA,IAEd,MAEEc,IAA2B,CAACC,GAAiBC,MAC1C9C,GAAsB,qBAAqB;AAAA,IAChD,CAAAI,MACEA,EAAa,YAAYyC,KACzBzC,EAAa,MAAM,kBAAkB0C,EAAiB,YAAA;AAAA,EAAY,GAIlEC,IAAuB,CAACD,MAA8B;AAC1D,YAAQA,GAAA;AAAA,MACN,KAAKE;AACH,eAAO,EAAE,gCAAgC;AAAA,MAC3C,KAAKC;AACH,eAAO,EAAE,4BAA4B;AAAA,MACvC,KAAKC;AACH,eAAO,EAAE,kCAAkC;AAAA,MAC7C;AACE,eAAOJ;AAAA,IAAA;AAAA,EAEb,GAEMK,IAA4B,CAACL,MAA8B;AAC/D,YAAQA,GAAA;AAAA,MACN,KAAKM;AACH,eAAO,EAAE,8BAA8B;AAAA,MACzC,KAAKC;AACH,eAAO,EAAE,qCAAqC;AAAA,MAChD,KAAKC;AACH,eAAO,EAAE,0CAA0C;AAAA,MACrD,KAAKC;AACH,eAAO,EAAE,mCAAmC;AAAA,MAC9C,KAAKC;AACH,eAAO,EAAE,iCAAiC;AAAA,MAC5C,KAAKC;AACH,eAAO,EAAE,sCAAsC;AAAA,MACjD;AACE,eAAOX;AAAA,IAAA;AAAA,EAEb,GAEMY,IAAgB;AAAA,IACpB,sBAAsB,MAAM;AAC1B,YAAMC,IAA4E,CAAA;AAElF,aAAA3B,EAAW,QAAQ,CAAAK,MAAa;AAC9B,QAAAuB,EAAyB,QAAQ,CAAAd,MAAoB;AACnD,gBAAMe,IAAuBjB,EAAyBP,EAAU,MAAMS,CAAgB;AACtF,UAAIe,MACGF,EAAoBtB,EAAU,IAAI,MACrCsB,EAAoBtB,EAAU,IAAI,IAAI,CAAA,IAExCsB,EAAoBtB,EAAU,IAAI,EAAGwB,EAAqB,IAAK,IAC7DA,EAAqB,QAAQ,WAAWA,EAAqB,KAAK,EAAE,aAAa;AAAA,QAEvF,CAAC;AAAA,MACH,CAAC,GAEMF;AAAA,IACT,GAAA;AAAA,IAEA,uBAAuB,MAAM;AAC3B,YAAMG,IAA8E,CAAA;AAEpF,aAAA7D,EAAQ,QAAQ,CAAA8D,MAAuB;AACrC,QAAAD,EAAqBC,EAAoB,IAAK,IAAIA,EAAoB,QAClE,WAAWA,EAAoB,KAAK,EAAE,SAAA,IACtC;AAAA,MACN,CAAC,GAEMD;AAAA,IACT,GAAA;AAAA,IAEA,qBAAqB,MAAM;AACzB,YAAME,IAA0E,CAAA;AAEhF,aAAAzB,EAAmB,QAAQ,CAAA0B,MAAa;AACtC,QAAAD,EAAmBC,EAAU,IAAK,IAAIA,EAAU,SAC5C,WAAWA,EAAU,MAAM,IAC3B;AAAA,MACN,CAAC,GAEGvB,MACFsB,EAAmBtB,EAAc,IAAK,IAAIA,EAAc,SACpD,WAAWA,EAAc,MAAM,IAC/B,SAGCsB;AAAA,IACT,GAAA;AAAA,IAEA,eACEhE,GAAsB,iBACtBH,EAA8C;AAAA,EAAA,GAG5CqE,IAAeC,EAAuC;AAAA,IAC1D,UAAUC,GAAYzE,EAA6B;AAAA,IACnD,eAAA+D;AAAA,EAAA,CACD,GAEKW,IAAkBC,EAAS;AAAA,IAC/B,SAASJ,EAAa;AAAA,EAAA,CACvB,GAEKK,IAAkBC,EAAQ,MAAM;AACpC,QAAI;AAEF,YAAMb,IAA0E,CAAA;AAChF,MAAIU,EAAgB,uBAClB,OAAO,QAAQA,EAAgB,mBAAmB,EAAE,QAAQ,CAAC,CAACI,GAAOC,CAAa,MAAM;AACtF,QAAIA,MACFf,EAAoBc,CAAK,IAAIC;AAAA,MAEjC,CAAC;AAGH,YAAMC,IAAsD;AAAA,QAC1D,qBAAAhB;AAAA,QACA,sBAAsBU,EAAgB,wBAAwB,CAAA;AAAA,QAC9D,oBAAoBA,EAAgB,sBAAsB,CAAA;AAAA,QAC1D,eAAeA,EAAgB;AAAA,MAAA,GAG3BlE,IAAsBL;AAAA,QAC1B6E;AAAA,QACA3E;AAAA,SACCA,GAAsB,eAAe,CAAA,GAAI,OAAO,CAAAsC,MAASA,EAAM,IAAI;AAAA,QACpER,GAAY;AAAA,MAAA;AAGd,aAAO8C;AAAA,QACLzE;AAAA,QACAa;AAAA,QACAG;AAAA,QACAC;AAAA,QACAC;AAAA,MAAA;AAAA,IAEJ,QAAQ;AAEN,aAAOrB,IACH4E;AAAA,QACE5E;AAAA,QACAgB;AAAA,QACAG;AAAA,QACAC;AAAA,QACAC;AAAA,MAAA,IAEF;AAAA,IACN;AAAA,EACF,GAAG;AAAA,IACDgD;AAAA,IACArE;AAAA,IACA8B,GAAY;AAAA,IACZd;AAAA,IACAG;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA,CACD,GAEKwD,IAAeC,GAAc;AAAA,IACjC,YAAY9D,EAAS;AAAA,IACrB,WAAWA,EAAS;AAAA,EAAA,CACrB,GAEK+D,IAAW,CAACC,MAAwC;AACxD,UAAM7E,IAAsBL;AAAA,MAC1BkF;AAAA,MACAhF;AAAA,MACAC;AAAA,MACA6B,GAAY;AAAA,IAAA;AAEd,IAAAhB,EAAOX,CAAmB;AAAA,EAC5B,GAEM8E,IAA2BC,GAAuBX,KAAmB,CAAC,GAEtEY,IACJ,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,eAAelD,IAAmB,QAAQ;AAAA,MAC1C,gBAAgBA,IAAmB,aAAa;AAAA,MAChD,YAAYA,IAAmB,eAAe;AAAA,MAC9C,KAAK;AAAA,MAEL,UAAA;AAAA,QAAA,gBAAAmD,EAAC9D,GAAA,EAAO,SAAQ,aAAY,SAAST,GAAU,OAAO,EAAE,WAAW,GAChE,UAAA,EAAE,WAAW,EAAA,CAChB;AAAA,QACA,gBAAAuE;AAAA,UAAC9D;AAAA,UAAA;AAAA,YACC,SAAS0C,EAAa,aAAaa,CAAQ;AAAA,YAC3C,OAAO,EAAE,SAAS;AAAA,YAClB,WAAW9D;AAAA,YAEV,YAAE,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,EAAA;AAIJ,2BACG,OAAA,EAAI,KAAKgB,GAAc,WAAWsD,EAAO,WACxC,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAGC,EAAO,aAAa,IAAKpD,IAAgD,KAA7BoD,EAAO,mBAAwB;AAAA,QAEzF,UAAA,gBAAAH,EAACC,GAAA,EAAK,gBAAe,iBACnB,UAAA;AAAA,UAAA,gBAAAD,EAACC,KAAK,eAAc,UAAS,KAAKlD,IAAmB,IAAI,GACvD,UAAA;AAAA,YAAA,gBAAAmD,EAAC7D,GAAA,EAAQ,IAAG,MAAK,UAAUU,IAAmB,OAAO,MAClD,UAAA,EAAE,aAAa,EAAE,cAAA0C,EAAA,CAAc,EAAA,CAClC;AAAA,YACC1C,IACC,gBAAAiD,EAACC,GAAA,EAAK,eAAc,UAAS,KAAK,GAChC,UAAA;AAAA,cAAA,gBAAAC,EAAC7D,GAAA,EAAQ,IAAG,MAAK,UAAS,MACvB,UAAAwD,GACH;AAAA,gCACCvD,GAAA,EAAK,WAAW6D,EAAO,eAAgB,UAAA,EAAE,eAAe,EAAA,CAAE;AAAA,YAAA,EAAA,CAC7D,IAEA,gBAAAD,EAAC7D,GAAA,EAAQ,IAAG,MAAK,UAAS,MAAK,WAAW8D,EAAO,eAC9C,YAAE,uBAAuB,EAAE,UAAUN,EAAA,CAA0B,EAAA,CAClE;AAAA,UAAA,GAEJ;AAAA,UACC9C,KAAoBgD;AAAA,QAAA,EAAA,CACvB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAC,EAACI,GAAA,EAAc,GAAGtB,GAChB,UAAA;AAAA,MAAA,gBAAAkB,EAACK,IAAA,EACE,UAAA;AAAA,QAAAzD,EAAW,SAAS,KACnB,gBAAAoD,EAAC,OAAA,EAAI,WAAWG,EAAO,YACrB,UAAA;AAAA,UAAA,gBAAAD,EAAC7D,GAAA,EAAQ,IAAG,MAAM,UAAA,EAAE,mBAAmB,GAAE;AAAA,UACxCO,EAAW,IAAI,CAAAK,MACd,gBAAA+C,EAACC,KAA0B,eAAc,UAAS,KAAK,GACpD,UAAA;AAAA,YAAArD,EAAW,SAAS,KAAK,gBAAAsD,EAAC7D,KAAQ,IAAG,MAAM,YAAU,MAAA,CAAM;AAAA,8BAC3DiE,GAAA,EAAK,qBAAqB,EAAE,MAAM,OAAO,OAAO,CAAC,KAAK,GAAG,KAAK,KAAK,IACjE,UAAA9B,EAAyB,IAAI,CAAAd,MAAoB;AAChD,oBAAM6C,IAA6B/C;AAAA,gBACjCP,EAAU;AAAA,gBACVS;AAAA,cAAA;AAEF,kBAAI6C;AACF,uBACE,gBAAAL;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBAEC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,cAAc,EAAE,WAAW;AAAA,oBAC3B,YAAU;AAAA,oBACV,OAAO7C,EAAqBD,CAAgB;AAAA,oBAC5C,MAAM,uBAAuBT,EAAU,IAAI,IAAIsD,EAA2B,IAAI;AAAA,kBAAA;AAAA,kBANzE7C;AAAA,gBAAA;AAAA,YAUb,CAAC,EAAA,CACH;AAAA,UAAA,EAAA,GAtBST,EAAU,IAuBrB,CACD;AAAA,QAAA,GACH;AAAA,QAEDpC,EAAQ,SAAS,uBACf,OAAA,EAAI,WAAWsF,EAAO,YACrB,UAAA;AAAA,UAAA,gBAAAD,EAAC7D,GAAA,EAAQ,IAAG,MAAM,UAAA,EAAE,cAAc,GAAE;AAAA,4BACnCiE,GAAA,EAAK,qBAAqB,EAAE,MAAM,OAAO,OAAO,CAAC,KAAK,GAAG,KAAK,KAAK,IACjE,UAAAzF,EAAQ,IAAI,CAAAK,MACX,gBAAAgF;AAAA,YAACO;AAAA,YAAA;AAAA,cAEC,SAASvF;AAAA,cACT,UAAAU;AAAA,YAAA;AAAA,YAFKV,EAAa;AAAA,UAAA,CAIrB,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QAEDiC,EAAmB,SAAS,uBAC1B,OAAA,EAAI,WAAWgD,EAAO,YACrB,UAAA;AAAA,UAAA,gBAAAD,EAAC7D,GAAA,EAAQ,IAAG,MAAM,UAAA,EAAE,yBAAyB,GAAE;AAAA,UAC/C,gBAAA6D;AAAA,YAACI;AAAA,YAAA;AAAA,cACC,qBAAqB,EAAE,MAAM,OAAO,OAAO,CAAC,KAAK,GAAG,GAAG,OAAO,CAAC,KAAK,KAAK,GAAG,EAAA;AAAA,cAC5E,KAAK;AAAA,cAEJ,UAAAnD,EAAmB,IAAI,CAAA5B,MACtB,gBAAA2E;AAAA,gBAACQ;AAAA,gBAAA;AAAA,kBAEC,QAAO;AAAA,kBACP,KAAK;AAAA,kBACL,YAAU;AAAA,kBACV,OAAO3C,EAA0BxC,EAAkB,IAAI;AAAA,kBACvD,MAAM,sBAAsBA,EAAkB,IAAI;AAAA,gBAAA;AAAA,gBAL7CA,EAAkB;AAAA,cAAA,CAO1B;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GACF;AAAA,QAED+B,KACC,gBAAA0C,EAAC,OAAA,EAAI,WAAWG,EAAO,YACrB,UAAA;AAAA,UAAA,gBAAAD,EAAC7D,GAAA,EAAQ,IAAG,MAAM,UAAA,EAAE,oBAAoB,GAAE;AAAA,UAC1C,gBAAA6D,EAACI,GAAA,EAAK,qBAAqB,EAAE,MAAM,OAAO,OAAO,CAAC,KAAK,GAAG,EAAA,GAAK,KAAK,IAClE,UAAA,gBAAAJ;AAAA,YAACQ;AAAA,YAAA;AAAA,cACC,QAAO;AAAA,cACP,KAAK;AAAA,cACL,YAAU;AAAA,cACV,OAAO3C,EAA0BT,EAAc,IAAI;AAAA,cACnD,MAAM,sBAAsBA,EAAc,IAAI;AAAA,YAAA;AAAA,UAAA,EAChD,CACF;AAAA,QAAA,GACF;AAAA,QAEDnB,KACC,gBAAA6D,EAAC,OAAA,EAAI,WAAWG,EAAO,YACrB,UAAA;AAAA,UAAA,gBAAAD,EAAC7D,GAAA,EAAQ,IAAG,MAAM,UAAA,EAAE,oBAAoB,GAAE;AAAA,UAC1C,gBAAA6D;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,YAAU;AAAA,cACV,OAAO,EAAE,oBAAoB;AAAA,cAC7B,aAAa,EAAE,0BAA0B;AAAA,cACzC,SAAS;AAAA,gBACP;AAAA,kBACE,OAAOlG,EAA8C;AAAA,kBACrD,OAAO,EAAE,oCAAoC;AAAA,gBAAA;AAAA,gBAE/C;AAAA,kBACE,OAAOA,EAA8C;AAAA,kBACrD,OAAO,EAAE,4BAA4B;AAAA,gBAAA;AAAA,cACvC;AAAA,YACF;AAAA,UAAA;AAAA,QACF,EAAA,CACF;AAAA,MAAA,GAEJ;AAAA,MACC,CAACsC,KAAoBgD;AAAA,IAAA,EAAA,CACxB;AAAA,EAAA,GACF;AAEJ;"}
@@ -32,10 +32,12 @@ function oo() {
32
32
  e(c.RUN_PAYROLL_CANCELLED_ALERT_DISMISSED);
33
33
  }, { data: P } = v({
34
34
  companyUuid: t(o)
35
- }), I = (P.payrollBlockerList ?? []).map((s) => ({
36
- key: s.key ?? "unknown",
37
- message: s.message
38
- })), b = () => {
35
+ }), I = (P.payrollBlockers ?? []).map(
36
+ (s) => ({
37
+ key: s.key ?? "unknown",
38
+ message: s.message
39
+ })
40
+ ), b = () => {
39
41
  e(c.RUN_PAYROLL_BLOCKERS_VIEW_ALL);
40
42
  }, R = [
41
43
  {
@@ -1 +1 @@
1
- {"version":3,"file":"PayrollLandingFlowComponents.js","sources":["../../../../src/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWireInRequestsListSuspense } from '@gusto/embedded-api/react-query/wireInRequestsList'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { PayrollHistory } from '../PayrollHistory/PayrollHistory'\nimport { PayrollList } from '../PayrollList/PayrollList'\nimport { PayrollOverview } from '../PayrollOverview/PayrollOverview'\nimport { PayrollReceipts } from '../PayrollReceipts/PayrollReceipts'\nimport {\n ConfirmWireDetails,\n type ConfirmWireDetailsComponentType,\n} from '../ConfirmWireDetails/ConfirmWireDetails'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { PayrollBlockerAlerts } from '../PayrollBlocker/components/PayrollBlockerAlerts'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { useFlow } from '@/components/Flow/useFlow'\nimport { useI18n } from '@/i18n'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { ensureRequired } from '@/helpers/ensureRequired'\nimport type { FlowContextInterface } from '@/components/Flow/useFlow'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { componentEvents } from '@/shared/constants'\n\nexport interface PayrollLandingFlowProps extends BaseComponentInterface<'Payroll.PayrollLanding'> {\n companyId: string\n withReimbursements?: boolean\n ConfirmWireDetailsComponent?: ConfirmWireDetailsComponentType\n showPayrollCancelledAlert?: boolean\n}\n\nexport interface PayrollLandingFlowContextInterface extends FlowContextInterface {\n component: (() => React.JSX.Element) | null\n companyId: string\n payrollUuid?: string\n previousState?: 'tabs' | 'overview'\n selectedTab?: string\n withReimbursements: boolean\n ConfirmWireDetailsComponent?: ConfirmWireDetailsComponentType\n startDate?: string\n endDate?: string\n showPayrollCancelledAlert?: boolean\n}\n\nexport function PayrollLandingTabsContextual() {\n const {\n companyId,\n onEvent,\n selectedTab = 'run-payroll',\n ConfirmWireDetailsComponent = ConfirmWireDetails,\n showPayrollCancelledAlert,\n } = useFlow<PayrollLandingFlowContextInterface>()\n const [currentTab, setCurrentTab] = useState(selectedTab)\n const { Tabs, Alert } = useComponentContext()\n\n useI18n('Payroll.PayrollLanding')\n const { t } = useTranslation('Payroll.PayrollLanding')\n\n const { data: wireInRequestsData } = useWireInRequestsListSuspense({\n companyUuid: ensureRequired(companyId),\n })\n\n const hasActiveWireInRequests = (wireInRequestsData.wireInRequestList || []).some(\n r => r.status === 'awaiting_funds',\n )\n\n const handleDismissPayrollCancelledAlert = () => {\n onEvent(componentEvents.RUN_PAYROLL_CANCELLED_ALERT_DISMISSED)\n }\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: ensureRequired(companyId),\n })\n\n const payrollBlockerList = blockersData.payrollBlockerList ?? []\n\n const blockers: ApiPayrollBlocker[] = payrollBlockerList.map(blocker => ({\n key: blocker.key ?? 'unknown',\n message: blocker.message,\n }))\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n const tabs = [\n {\n id: 'run-payroll',\n label: t('tabs.runPayroll'),\n content: <PayrollList companyId={ensureRequired(companyId)} onEvent={onEvent} />,\n },\n {\n id: 'payroll-history',\n label: t('tabs.payrollHistory'),\n content: <PayrollHistory companyId={ensureRequired(companyId)} onEvent={onEvent} />,\n },\n ]\n\n return (\n <Flex flexDirection=\"column\" gap={32}>\n {showPayrollCancelledAlert && (\n <Alert\n status=\"success\"\n label={t('alerts.payrollCancelled')}\n onDismiss={handleDismissPayrollCancelledAlert}\n />\n )}\n {hasActiveWireInRequests && (\n <ConfirmWireDetailsComponent companyId={ensureRequired(companyId)} onEvent={onEvent} />\n )}\n <PayrollBlockerAlerts blockers={blockers} onViewBlockersClick={onViewBlockers} />\n <Tabs\n tabs={tabs}\n selectedId={currentTab}\n onSelectionChange={setCurrentTab}\n aria-label={t('aria.tabNavigation')}\n />\n </Flex>\n )\n}\n\nexport function PayrollLandingReceiptsContextual() {\n const { payrollUuid, onEvent, withReimbursements } = useFlow<PayrollLandingFlowContextInterface>()\n\n return (\n <PayrollReceipts\n onEvent={onEvent}\n payrollId={ensureRequired(payrollUuid)}\n withReimbursements={withReimbursements}\n />\n )\n}\n\nexport function PayrollLandingOverviewContextual() {\n const { companyId, payrollUuid, onEvent, withReimbursements, ConfirmWireDetailsComponent } =\n useFlow<PayrollLandingFlowContextInterface>()\n\n return (\n <PayrollOverview\n onEvent={onEvent}\n companyId={ensureRequired(companyId)}\n payrollId={ensureRequired(payrollUuid)}\n withReimbursements={withReimbursements}\n ConfirmWireDetailsComponent={ConfirmWireDetailsComponent}\n />\n )\n}\n"],"names":["PayrollLandingTabsContextual","companyId","onEvent","selectedTab","ConfirmWireDetailsComponent","ConfirmWireDetails","showPayrollCancelledAlert","useFlow","currentTab","setCurrentTab","useState","Tabs","Alert","useComponentContext","useI18n","t","useTranslation","wireInRequestsData","useWireInRequestsListSuspense","ensureRequired","hasActiveWireInRequests","r","handleDismissPayrollCancelledAlert","componentEvents","blockersData","usePayrollsGetBlockersSuspense","blockers","blocker","onViewBlockers","tabs","jsx","PayrollList","PayrollHistory","jsxs","Flex","PayrollBlockerAlerts","PayrollLandingReceiptsContextual","payrollUuid","withReimbursements","PayrollReceipts","PayrollLandingOverviewContextual","PayrollOverview"],"mappings":"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"}
1
+ {"version":3,"file":"PayrollLandingFlowComponents.js","sources":["../../../../src/components/Payroll/PayrollLanding/PayrollLandingFlowComponents.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useWireInRequestsListSuspense } from '@gusto/embedded-api/react-query/wireInRequestsList'\nimport { usePayrollsGetBlockersSuspense } from '@gusto/embedded-api/react-query/payrollsGetBlockers'\nimport { PayrollHistory } from '../PayrollHistory/PayrollHistory'\nimport { PayrollList } from '../PayrollList/PayrollList'\nimport { PayrollOverview } from '../PayrollOverview/PayrollOverview'\nimport { PayrollReceipts } from '../PayrollReceipts/PayrollReceipts'\nimport {\n ConfirmWireDetails,\n type ConfirmWireDetailsComponentType,\n} from '../ConfirmWireDetails/ConfirmWireDetails'\nimport type { ApiPayrollBlocker } from '../PayrollBlocker/payrollHelpers'\nimport { PayrollBlockerAlerts } from '../PayrollBlocker/components/PayrollBlockerAlerts'\nimport type { BaseComponentInterface } from '@/components/Base/Base'\nimport { useFlow } from '@/components/Flow/useFlow'\nimport { useI18n } from '@/i18n'\nimport { useComponentContext } from '@/contexts/ComponentAdapter/useComponentContext'\nimport { ensureRequired } from '@/helpers/ensureRequired'\nimport type { FlowContextInterface } from '@/components/Flow/useFlow'\nimport { Flex } from '@/components/Common/Flex/Flex'\nimport { componentEvents } from '@/shared/constants'\n\nexport interface PayrollLandingFlowProps extends BaseComponentInterface<'Payroll.PayrollLanding'> {\n companyId: string\n withReimbursements?: boolean\n ConfirmWireDetailsComponent?: ConfirmWireDetailsComponentType\n showPayrollCancelledAlert?: boolean\n}\n\nexport interface PayrollLandingFlowContextInterface extends FlowContextInterface {\n component: (() => React.JSX.Element) | null\n companyId: string\n payrollUuid?: string\n previousState?: 'tabs' | 'overview'\n selectedTab?: string\n withReimbursements: boolean\n ConfirmWireDetailsComponent?: ConfirmWireDetailsComponentType\n startDate?: string\n endDate?: string\n showPayrollCancelledAlert?: boolean\n}\n\nexport function PayrollLandingTabsContextual() {\n const {\n companyId,\n onEvent,\n selectedTab = 'run-payroll',\n ConfirmWireDetailsComponent = ConfirmWireDetails,\n showPayrollCancelledAlert,\n } = useFlow<PayrollLandingFlowContextInterface>()\n const [currentTab, setCurrentTab] = useState(selectedTab)\n const { Tabs, Alert } = useComponentContext()\n\n useI18n('Payroll.PayrollLanding')\n const { t } = useTranslation('Payroll.PayrollLanding')\n\n const { data: wireInRequestsData } = useWireInRequestsListSuspense({\n companyUuid: ensureRequired(companyId),\n })\n\n const hasActiveWireInRequests = (wireInRequestsData.wireInRequestList || []).some(\n r => r.status === 'awaiting_funds',\n )\n\n const handleDismissPayrollCancelledAlert = () => {\n onEvent(componentEvents.RUN_PAYROLL_CANCELLED_ALERT_DISMISSED)\n }\n\n const { data: blockersData } = usePayrollsGetBlockersSuspense({\n companyUuid: ensureRequired(companyId),\n })\n\n const payrollBlockerList = blockersData.payrollBlockers ?? []\n\n const blockers: ApiPayrollBlocker[] = payrollBlockerList.map(\n (blocker: { key?: string; message?: string }) => ({\n key: blocker.key ?? 'unknown',\n message: blocker.message,\n }),\n )\n\n const onViewBlockers = () => {\n onEvent(componentEvents.RUN_PAYROLL_BLOCKERS_VIEW_ALL)\n }\n\n const tabs = [\n {\n id: 'run-payroll',\n label: t('tabs.runPayroll'),\n content: <PayrollList companyId={ensureRequired(companyId)} onEvent={onEvent} />,\n },\n {\n id: 'payroll-history',\n label: t('tabs.payrollHistory'),\n content: <PayrollHistory companyId={ensureRequired(companyId)} onEvent={onEvent} />,\n },\n ]\n\n return (\n <Flex flexDirection=\"column\" gap={32}>\n {showPayrollCancelledAlert && (\n <Alert\n status=\"success\"\n label={t('alerts.payrollCancelled')}\n onDismiss={handleDismissPayrollCancelledAlert}\n />\n )}\n {hasActiveWireInRequests && (\n <ConfirmWireDetailsComponent companyId={ensureRequired(companyId)} onEvent={onEvent} />\n )}\n <PayrollBlockerAlerts blockers={blockers} onViewBlockersClick={onViewBlockers} />\n <Tabs\n tabs={tabs}\n selectedId={currentTab}\n onSelectionChange={setCurrentTab}\n aria-label={t('aria.tabNavigation')}\n />\n </Flex>\n )\n}\n\nexport function PayrollLandingReceiptsContextual() {\n const { payrollUuid, onEvent, withReimbursements } = useFlow<PayrollLandingFlowContextInterface>()\n\n return (\n <PayrollReceipts\n onEvent={onEvent}\n payrollId={ensureRequired(payrollUuid)}\n withReimbursements={withReimbursements}\n />\n )\n}\n\nexport function PayrollLandingOverviewContextual() {\n const { companyId, payrollUuid, onEvent, withReimbursements, ConfirmWireDetailsComponent } =\n useFlow<PayrollLandingFlowContextInterface>()\n\n return (\n <PayrollOverview\n onEvent={onEvent}\n companyId={ensureRequired(companyId)}\n payrollId={ensureRequired(payrollUuid)}\n withReimbursements={withReimbursements}\n ConfirmWireDetailsComponent={ConfirmWireDetailsComponent}\n />\n )\n}\n"],"names":["PayrollLandingTabsContextual","companyId","onEvent","selectedTab","ConfirmWireDetailsComponent","ConfirmWireDetails","showPayrollCancelledAlert","useFlow","currentTab","setCurrentTab","useState","Tabs","Alert","useComponentContext","useI18n","t","useTranslation","wireInRequestsData","useWireInRequestsListSuspense","ensureRequired","hasActiveWireInRequests","r","handleDismissPayrollCancelledAlert","componentEvents","blockersData","usePayrollsGetBlockersSuspense","blockers","blocker","onViewBlockers","tabs","jsx","PayrollList","PayrollHistory","jsxs","Flex","PayrollBlockerAlerts","PayrollLandingReceiptsContextual","payrollUuid","withReimbursements","PayrollReceipts","PayrollLandingOverviewContextual","PayrollOverview"],"mappings":"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"}
@@ -22,12 +22,14 @@ const _ = ({ companyId: e, onEvent: t }) => {
22
22
  companyId: e
23
23
  }), P = S.payScheduleList, { data: d } = g({
24
24
  companyUuid: e
25
- }), L = (d.payrollBlockerList ?? []).map((s) => ({
26
- key: s.key ?? "unknown",
27
- message: s.message
28
- })), { data: f } = B({
25
+ }), f = (d.payrollBlockers ?? []).map(
26
+ (s) => ({
27
+ key: s.key ?? "unknown",
28
+ message: s.message
29
+ })
30
+ ), { data: L } = B({
29
31
  companyUuid: e
30
- }), k = f.wireInRequestList ?? [], { mutateAsync: R } = A();
32
+ }), k = L.wireInRequestList ?? [], { mutateAsync: R } = A();
31
33
  return /* @__PURE__ */ a(
32
34
  b,
33
35
  {
@@ -63,7 +65,7 @@ const _ = ({ companyId: e, onEvent: t }) => {
63
65
  l(!1);
64
66
  },
65
67
  skippingPayrollId: y,
66
- blockers: L,
68
+ blockers: f,
67
69
  wireInRequests: k
68
70
  }
69
71
  );