@@ -30,7 +30,20 @@ const PaymentsTable: React.FC<PaymentTableProps> = (props: PaymentTableProps) =>
3030 }
3131 } , [ props . selectedPayments ] )
3232
33- const isSomeSelected = Object . keys ( selectedPayments ) . length > 0
33+ useEffect ( ( ) => {
34+ setToggleClicked ( false )
35+ } , [ props . currentPage ] )
36+
37+ useEffect ( ( ) => {
38+ const selectablePayments = props . payments . filter ( payment => payment . canBeReleased )
39+
40+ if ( selectablePayments . length === 0 ) {
41+ setToggleClicked ( false )
42+ } else {
43+ const areAllSelectablePaymentsSelected = selectablePayments . every ( payment => selectedPayments [ payment . id ] )
44+ setToggleClicked ( areAllSelectablePaymentsSelected )
45+ }
46+ } , [ props . payments , selectedPayments ] )
3447
3548 const togglePaymentSelection = ( paymentId : string ) => {
3649 const newSelections = { ...selectedPayments }
@@ -48,18 +61,23 @@ const PaymentsTable: React.FC<PaymentTableProps> = (props: PaymentTableProps) =>
4861 }
4962
5063 const toggleAllPayments = ( ) => {
51- const newSelections : { [ paymentId : string ] : Winning } = { }
52- if ( ! toggleClicked && ! isSomeSelected ) {
53- props . payments . forEach ( payment => {
54- if ( payment . canBeReleased ) {
55- newSelections [ payment . id ] = payment
56- }
64+ const newSelections = { ...selectedPayments }
65+ const selectablePayments = props . payments . filter ( payment => payment . canBeReleased )
66+ const areAllSelectablePaymentsSelected = selectablePayments . every ( payment => selectedPayments [ payment . id ] )
67+
68+ if ( areAllSelectablePaymentsSelected ) {
69+ selectablePayments . forEach ( payment => {
70+ delete newSelections [ payment . id ]
71+ } )
72+ } else {
73+ selectablePayments . forEach ( payment => {
74+ newSelections [ payment . id ] = payment
5775 } )
5876 }
5977
60- setToggleClicked ( ! toggleClicked )
6178 setSelectedPayments ( newSelections )
6279 props . onSelectedPaymentsChange ?.( newSelections )
80+ setToggleClicked ( ! areAllSelectablePaymentsSelected )
6381 }
6482
6583 const calculateTotal = ( ) => Object . values ( selectedPayments )
0 commit comments