import TreeSelectedGroup from '@/components/shared/TreeSelectedGroup'; import { HTTPSTATUS } from '@/constants'; import { apiAssignToGroup, apiQueryMembers, apiUnassignToGroup, } from '@/services/master/GroupController'; import { apiChangeRoleUser } from '@/services/master/UserController'; import { DeleteOutlined } from '@ant-design/icons'; import { ActionType, ProList, ProListMetas } from '@ant-design/pro-components'; import { useIntl } from '@umijs/max'; import { Button, Flex, message, Modal, Popconfirm, Segmented, Space, Tag, Tooltip, Typography, } from 'antd'; import { useRef, useState } from 'react'; const { Text } = Typography; type AssignGroupProps = { user: MasterModel.UserResponse | null; }; const AssignGroup = ({ user }: AssignGroupProps) => { const groupActionRef = useRef(); const intl = useIntl(); const [assignedGroups, setAssignedGroups] = useState( [], ); const [messageApi, contextHolder] = message.useMessage(); const [userRole, setUserRole] = useState( user?.metadata?.user_type || 'users', ); const [open, setOpen] = useState(false); const [confirmLoading, setConfirmLoading] = useState(false); const [groupSelected, setGroupSelected] = useState( null, ); const columns: ProListMetas = { title: { dataIndex: 'name', render: (_, item: MasterModel.GroupNode) => ( {item?.name} ), }, subTitle: { render: (_, entity) => { return ( {entity?.metadata?.code || '-'} {entity?.metadata?.short_name || '-'} ); }, }, actions: { render: (_, item: MasterModel.GroupNode) => { return ( { try { const body: MasterModel.AssignMemberRequest = { group_id: item.id, type: 'users', members: [user?.id || ''], }; const success = await apiUnassignToGroup(body); if (success.status === HTTPSTATUS.HTTP_NOCONTENT) { messageApi.success( intl.formatMessage({ id: 'master.users.unassign.success', defaultMessage: 'Unassign group successfully', }), ); groupActionRef.current?.reload(); } else { throw new Error('Unassign group failed'); } } catch (error) { console.error('Error when unassign group: ', error); messageApi.error( intl.formatMessage({ id: 'master.users.unassign.fail', defaultMessage: 'Unassign group failed', }), ); } }} > , ]} request={async () => { if (user?.id) { const resp = await apiQueryMembers(user.id); if (resp?.groups) { setAssignedGroups(resp.groups); return Promise.resolve({ success: true, data: resp?.groups, total: resp?.groups?.length || 0, }); } } return Promise.resolve({ success: false, data: [], total: 0, }); }} rowKey="id" search={false} /> ); }; export default AssignGroup;