({
user,
onChangeMember,
onDeleteMember,
}: {
user: MembersType;
onChangeMember: (id: string, role: string, status: string) => Promise<void>;
onDeleteMember: (user: MembersType) => Promise<void>;
})
| 139 | } |
| 140 | |
| 141 | function RowMember({ |
| 142 | user, |
| 143 | onChangeMember, |
| 144 | onDeleteMember, |
| 145 | }: { |
| 146 | user: MembersType; |
| 147 | onChangeMember: (id: string, role: string, status: string) => Promise<void>; |
| 148 | onDeleteMember: (user: MembersType) => Promise<void>; |
| 149 | }): JSX.Element { |
| 150 | const [loading, setLoading] = useState(false); |
| 151 | const [data, setData] = useState(user); |
| 152 | const [modal, setModal] = useState(false); |
| 153 | |
| 154 | async function onChange(e: any) { |
| 155 | setLoading(true); |
| 156 | const role = e.target.value; |
| 157 | const id = e.target.id; |
| 158 | await onChangeMember(id, role, user.status); |
| 159 | setData({ ...data, role }); |
| 160 | setLoading(false); |
| 161 | } |
| 162 | |
| 163 | return ( |
| 164 | <li key={user.id} className={styles.mb2}> |
| 165 | <div className={styles.border}> |
| 166 | <div className={styles.userWrapper}> |
| 167 | <Avatar src={user.profileImageUrl} text={user.displayName} /> |
| 168 | <p className={styles.userDetails}> |
| 169 | {user.displayName} |
| 170 | {user.status === 'PENDING' && ( |
| 171 | <Badge |
| 172 | className={classNames({ |
| 173 | [styles.ml1]: !!user.displayName, |
| 174 | })} |
| 175 | type="info" |
| 176 | > |
| 177 | Pending |
| 178 | </Badge> |
| 179 | )} |
| 180 | <br /> |
| 181 | <span className={styles.userEmail}>{user.email}</span> |
| 182 | </p> |
| 183 | <div className={styles.grow} /> |
| 184 | <div> |
| 185 | <NativeSelect |
| 186 | id={user.id} |
| 187 | value={data.role} |
| 188 | onChange={(e: React.ChangeEvent<HTMLSelectElement>) => { |
| 189 | onChange(e); |
| 190 | }} |
| 191 | disabled={loading} |
| 192 | icon={<FiUser />} |
| 193 | theme="white" |
| 194 | options={[ |
| 195 | { label: 'Member', value: Roles.MEMBER }, |
| 196 | { label: 'Admin', value: Roles.ADMIN }, |
| 197 | { label: 'Owner', value: Roles.OWNER }, |
| 198 | ]} |
nothing calls this directly
no test coverage detected