@@ -3,7 +3,7 @@ import { usePayrollsGetSuspense } from '@gusto/embedded-api/react-query/payrolls
3
3
import { useTranslation } from 'react-i18next'
4
4
import { useBankAccountsGetSuspense } from '@gusto/embedded-api/react-query/bankAccountsGet'
5
5
import { useEmployeesListSuspense } from '@gusto/embedded-api/react-query/employeesList'
6
- import { useState } from 'react'
6
+ import { useEffect , useState } from 'react'
7
7
import { PayrollOverviewPresentation } from './PayrollOverviewPresentation'
8
8
import { componentEvents , PAYROLL_PROCESSING_STATUS } from '@/shared/constants'
9
9
import { BaseComponent , useBase , type BaseComponentInterface } from '@/components/Base'
@@ -39,22 +39,31 @@ export const Root = ({ companyId, payrollId, dictionary, onEvent }: PayrollOverv
39
39
)
40
40
const payrollData = data . payrollShow !
41
41
42
- //If payroll is in submitting state and we are not polling yet, start polling
43
- if (
44
- payrollData . processingRequest ?. status === PAYROLL_PROCESSING_STATUS . submitting &&
45
- ! isPolling
46
- ) {
47
- setIsPolling ( true )
48
- }
49
- //If we are polling and payroll is in success state, stop polling, and emit event
50
- //Payroll is processed
51
- if (
52
- isPolling &&
53
- payrollData . processingRequest ?. status === PAYROLL_PROCESSING_STATUS . submit_success
54
- ) {
55
- onEvent ( componentEvents . RUN_PAYROLL_PROCESSED )
56
- setIsPolling ( false )
57
- }
42
+ useEffect ( ( ) => {
43
+ // Start polling when payroll is submitting and not already polling
44
+ if (
45
+ payrollData . processingRequest ?. status === PAYROLL_PROCESSING_STATUS . submitting &&
46
+ ! isPolling
47
+ ) {
48
+ setIsPolling ( true )
49
+ }
50
+ // Stop polling and emit event when payroll is processed successfully
51
+ if (
52
+ isPolling &&
53
+ payrollData . processingRequest ?. status === PAYROLL_PROCESSING_STATUS . submit_success
54
+ ) {
55
+ onEvent ( componentEvents . RUN_PAYROLL_PROCESSED )
56
+ setIsPolling ( false )
57
+ }
58
+ // If we are polling and payroll is in failed state, stop polling, and emit failure event
59
+ if (
60
+ isPolling &&
61
+ payrollData . processingRequest ?. status === PAYROLL_PROCESSING_STATUS . processing_failed
62
+ ) {
63
+ onEvent ( componentEvents . RUN_PAYROLL_PROCESSING_FAILED )
64
+ setIsPolling ( false )
65
+ }
66
+ } , [ payrollData . processingRequest ?. status , isPolling , onEvent ] )
58
67
59
68
const { data : bankAccountData } = useBankAccountsGetSuspense ( {
60
69
companyId,
0 commit comments