Я пытаюсь создать форму редактирования в React-Admin с настраиваемым полем ввода, называемым UserRolesSelect, который отображает список ролей из отдельной конечной точки ролей с выбранными ролями текущего пользователя. Однако при выполнении запроса на редактирование значения пользовательского ввода не обновляются в данных формы. Я предоставил образцы ответов от обеих вышеупомянутых конечных точек.
// sample response for getting user details by ID
const user = {
id:1,
name:'User1',
email:'user1@user.com',
created_at:2020-04-01T10:43:36.000000Z,
roles:[{id:1,name:'User'}]
};
// sample response of getting roles list
const roles = [
{id: 1,
name: 'user'},
{id: 2,
name: 'admin'}
]
const UserRolesSelect = ({ source, record }) => {
const [selectedRoles, setRoles] = useState([]);
useEffect(() => {
const userRoles = record.roles.map(role => role.id);
setRoles(userRoles);
}, []);
const { data, loading: rolesLoading, error: rolesError } = useQuery({
type: 'getList',
resource: 'roles',
});
if (rolesLoading) return <Loading />;
if (rolesError) return <Error />;
if (!data) return null;
const rolesList = data.map(role => <MenuItem key={role.id} value={role.id} selected={selectedRoles}>
{role.name}
</MenuItem>);
const handleChangeMultiple = event => {
const { value: role } = event.target;
const value = [...role];
setRoles(value);
};
return <Select
value={selectedRoles}
onChange={handleChangeMultiple}
multiple
>
{rolesList}
</Select>
};
const UserEdit = props => {
return <Edit {...props}>
<SimpleForm >
<TextInput source="name" />
<TextInput source="email" />
<UserRolesSelect source="roles"/>
</SimpleForm>
</Edit>
};