/****************************************************************************** * Copyright (c) 2026 Contributors to the Eclipse Foundation. * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * https://www.eclipse.org/legal/epl-2.0. * * SPDX-License-Identifier: EPL-2.0 *****************************************************************************/ import { FunctionComponent, useEffect, useState, useContext } from 'react'; import { Box, Typography, Button, Divider, List, ListItem, ListItemAvatar, Avatar, ListItemText, IconButton, type PaperProps, Paper } from '@mui/material'; import { Link as RouterLink } from 'react-router'; import { AdminDashboardRoutes } from '../admin-dashboard-routes'; import { MainContext } from '../../../context'; import { Customer, UserData } from '../../../extension-registry-types'; import { AddUserDialog } from '../../../components/add-user-dialog'; import DeleteIcon from '@mui/icons-material/Delete'; import PersonAddIcon from '@mui/icons-material/PersonAdd'; import { createRoute } from '../../../utils'; import { useAddCustomerMember, useCustomerMembers, useRemoveCustomerMember } from './use-customers'; const sectionPaperProps: PaperProps = { elevation: 1, sx: { p: 3, mb: 3 } }; export const CustomerMemberList: FunctionComponent = props => { const { handleError } = useContext(MainContext); const [addDialogIsOpen, setAddDialogIsOpen] = useState(false); const { data, error } = useCustomerMembers(props.customer.name); const { mutateAsync: addMember } = useAddCustomerMember(props.customer.name); const { mutateAsync: removeMember } = useRemoveCustomerMember(props.customer.name); const members = data?.customerMemberships ?? []; const users = members.map(member => member.user); // Preserve the previous behaviour of surfacing fetch failures via the global error dialog. useEffect(() => { if (error) { handleError(error); } }, [error, handleError]); const handleCloseAddDialog = () => { setAddDialogIsOpen(false); }; const handleOpenAddDialog = async () => { setAddDialogIsOpen(true); }; const handleAddUser = async (user: UserData) => { try { await addMember(user); } catch (err) { handleError(err); } }; const handleRemoveUser = async (user: UserData) => { try { await removeMember(user); } catch (err) { handleError(err); } }; return ( Members {members.length === 0 ? ( No members assigned to this customer. ) : ( {users.map(user => ( handleRemoveUser(user)} title='Remove member'> }> {user.loginName} } secondary={user.fullName} /> ))} )} {/*{members.length ?*/} {/* */} {/* {members.map(member =>*/} {/* changeRole(member, role)}*/} {/* onRemoveUser={() => changeRole(member, 'remove')} />)}*/} {/* :*/} {/* There are no members assigned yet.}*/} member.user)} onClose={handleCloseAddDialog} onAddUser={handleAddUser} /> ); }; export interface CustomerMemberListProps { customer: Customer; }