1
1
import { NPOBackend } from '../../utils/auth_utils.js' ;
2
2
import { useEffect , useState } from 'react' ;
3
- import { Table , Thead , Tbody , Tr , Th , Td , TableContainer , Button , HStack } from '@chakra-ui/react'
3
+ import { Table , Thead , Tbody , Tr , Th , Td , TableContainer , Button } from '@chakra-ui/react'
4
4
import { Checkbox } from '@chakra-ui/react'
5
5
import PropTypes from 'prop-types' ;
6
6
7
- const PendingAccounts = ( { accountType, searchQuery } ) => {
7
+ const PendingAccounts = ( { accountType, setHasPendingAccounts } ) => {
8
8
const [ pendingAccounts , setPendingAccounts ] = useState ( [ ] ) ;
9
9
const [ individualChecked , setIndividualChecked ] = useState ( new Array ( pendingAccounts . length ) . fill ( false ) ) ;
10
10
const [ checkedAccountIds , setCheckedAccountIds ] = useState ( [ ] ) ;
11
+ const [ accountStatus , setAccountStatus ] = useState ( { } ) ;
12
+
11
13
12
14
useEffect ( ( ) => {
13
15
const renderTable = async ( ) => {
14
- const { data } = await NPOBackend . get ( '/users/pending-accounts' , {
15
- params : {
16
- keyword : searchQuery
17
- }
18
- } ) ;
16
+ const { data } = await NPOBackend . get ( '/users/pending-accounts' , { params : { accountType : accountType } } ) ;
19
17
setPendingAccounts ( data ) ;
18
+ console . log ( "ELNGLKNKJ: " + data ) ;
19
+ setHasPendingAccounts ( data . length !== 0 ) ;
20
20
} ;
21
21
renderTable ( ) ;
22
+ } , [ ] )
23
+
24
+ useEffect ( ( ) => {
25
+ const newAccountStatus = { }
26
+ for ( let i = 0 ; i < pendingAccounts . length ; i ++ ) {
27
+ newAccountStatus [ pendingAccounts [ i ] [ "id" ] ] = "pending" ;
28
+ }
29
+ setAccountStatus ( newAccountStatus ) ;
22
30
} , [ pendingAccounts ] )
23
31
24
32
const handleApproveUser = async ( ids ) => {
25
33
try {
26
34
for ( let i = 0 ; i < ids . length ; i ++ ) {
35
+ console . log ( "approved: " + ids [ i ] ) ;
27
36
await NPOBackend . put ( `/users/approve/${ ids [ i ] } ` ) ;
28
37
}
38
+ setIndividualChecked ( new Array ( pendingAccounts . length ) . fill ( false ) ) ;
29
39
} catch ( error ) {
30
40
console . log ( error ) ;
31
41
}
@@ -34,8 +44,10 @@ const PendingAccounts = ( {accountType, searchQuery} ) => {
34
44
const handleDeleteUser = async ( ids ) => {
35
45
try {
36
46
for ( let i = 0 ; i < ids . length ; i ++ ) {
47
+ console . log ( "deleted: " + ids [ i ] ) ;
37
48
await NPOBackend . delete ( `/users/${ ids [ i ] } ` ) ;
38
49
}
50
+ setIndividualChecked ( new Array ( pendingAccounts . length ) . fill ( false ) ) ;
39
51
} catch ( error ) {
40
52
console . log ( error ) ;
41
53
}
@@ -66,8 +78,28 @@ const PendingAccounts = ( {accountType, searchQuery} ) => {
66
78
console . log ( newCheckedAccountIds ) ;
67
79
}
68
80
81
+ useEffect ( ( ) => console . log ( "accountStatus: " + JSON . stringify ( accountStatus ) ) , [ accountStatus ] ) ;
82
+
83
+ const acceptAllClick = ( ) => {
84
+ handleApproveUser ( checkedAccountIds ) ;
85
+ const newAccountStatus = { ... accountStatus } ;
86
+ for ( let i = 0 ; i < checkedAccountIds . length ; i ++ ) {
87
+ newAccountStatus [ checkedAccountIds [ i ] ] = "approved" ;
88
+ }
89
+ setAccountStatus ( newAccountStatus ) ;
90
+ }
91
+
92
+ const deleteAllClick = ( ) => {
93
+ handleDeleteUser ( checkedAccountIds ) ;
94
+ const newAccountStatus = { ... accountStatus } ;
95
+ for ( let i = 0 ; i < checkedAccountIds . length ; i ++ ) {
96
+ newAccountStatus [ checkedAccountIds [ i ] ] = "declined" ;
97
+ }
98
+ setAccountStatus ( newAccountStatus ) ;
99
+ }
100
+
69
101
return (
70
- < TableContainer >
102
+ < TableContainer border = "1px solid #ededed" borderRadius = "10px" >
71
103
< Table variant = 'simple' >
72
104
< Thead >
73
105
< Tr >
@@ -76,34 +108,45 @@ const PendingAccounts = ( {accountType, searchQuery} ) => {
76
108
</ Th >
77
109
< Th > Name</ Th >
78
110
< Th > Email</ Th >
79
- < HStack >
80
- < Th > Action </ Th >
81
- < Button onClick = { ( ) => { handleApproveUser ( checkedAccountIds ) } } mr = { 3 } colorScheme = 'blue' > Accept</ Button >
82
- < Button onClick = { ( ) => { handleDeleteUser ( checkedAccountIds ) } } > Decline</ Button >
83
- </ HStack >
111
+ < Th width = "0" > Action </ Th >
112
+ < Th >
113
+ < Button isDisabled = { checkedAccountIds . length === 0 } onClick = { acceptAllClick } mr = { 3 } colorScheme = 'blue' > Accept</ Button >
114
+ < Button isDisabled = { checkedAccountIds . length === 0 } onClick = { deleteAllClick } > Decline</ Button >
115
+ </ Th >
84
116
</ Tr >
85
117
</ Thead >
86
118
< Tbody >
87
119
{
88
120
pendingAccounts . map ( ( account , i ) => (
89
- accountType === account . type ? (
90
- < Tr key = { i } >
91
- < Td > < Checkbox isChecked = { individualChecked [ i ] } onChange = { ( e ) => { const newIndividualChecked = [ ...individualChecked ] ;
92
- newIndividualChecked [ i ] = e . target . checked ;
93
- setIndividualChecked ( newIndividualChecked ) ;
94
- updateIndividualCheckedAccountIds ( e , account . id ) } } >
95
- </ Checkbox >
96
- </ Td >
97
- < Td > { account . firstName } { account . lastName } </ Td >
98
- < Td > { account . email } </ Td >
121
+ < Tr key = { i } >
122
+ < Td > < Checkbox isDisabled = { accountStatus [ account . id ] != "pending" } isChecked = { individualChecked [ i ] } onChange = { ( e ) => { const newIndividualChecked = [ ...individualChecked ] ;
123
+ newIndividualChecked [ i ] = e . target . checked ;
124
+ setIndividualChecked ( newIndividualChecked ) ;
125
+ updateIndividualCheckedAccountIds ( e , account . id ) ; } } >
126
+ </ Checkbox >
127
+ </ Td >
128
+ < Td color = { accountStatus [ account . id ] === "pending" ? "black" : "gray" } > { account . firstName } { account . lastName } </ Td >
129
+ < Td color = { accountStatus [ account . id ] === "pending" ? "black" : "gray" } > { account . email } </ Td >
130
+ < Td > </ Td >
131
+ {
132
+ accountStatus [ account . id ] === "pending" ? (
99
133
< Td >
100
- < Button onClick = { ( ) => { handleApproveUser ( [ account . id ] ) } } mr = { 3 } colorScheme = 'blue' > Accept</ Button >
101
- < Button onClick = { ( ) => { handleDeleteUser ( [ account . id ] ) } } > Decline</ Button >
134
+ < Button onClick = { ( ) => { handleApproveUser ( [ account . id ] ) ;
135
+ const newAccountStatus = { ... accountStatus } ;
136
+ newAccountStatus [ account . id ] = "approved" ;
137
+ setAccountStatus ( newAccountStatus ) ; } } mr = { 3 } colorScheme = 'blue' > Accept</ Button >
138
+ < Button onClick = { ( ) => { handleDeleteUser ( [ account . id ] ) ;
139
+ const newAccountStatus = { ... accountStatus } ;
140
+ newAccountStatus [ account . id ] = "declined" ;
141
+ setAccountStatus ( newAccountStatus ) ; } } > Decline</ Button >
102
142
</ Td >
103
- </ Tr >
104
- ) : (
105
- < > </ >
106
- )
143
+ ) : accountStatus [ account . id ] === "approved" ? (
144
+ < Td color = "green" > Approved</ Td >
145
+ ) : (
146
+ < Td color = "red" > Declined</ Td >
147
+ )
148
+ }
149
+ </ Tr >
107
150
)
108
151
)
109
152
}
@@ -115,7 +158,7 @@ const PendingAccounts = ( {accountType, searchQuery} ) => {
115
158
116
159
PendingAccounts . propTypes = {
117
160
accountType : PropTypes . string . isRequired ,
118
- searchQuery : PropTypes . string
161
+ setHasPendingAccounts : PropTypes . func . isRequired
119
162
} ;
120
163
121
164
export default PendingAccounts ;
0 commit comments