import React, { ChangeEvent, FormEvent } from 'react'; import { IUser } from '../../model'; import { UserService } from '../../services/user.service'; interface IState { users: IUser[]; showSavedMessage: boolean; } export class Users extends React.Component { constructor(props: unknown) { super(props); this.state = { users: [], showSavedMessage: false, }; } componentDidMount() { UserService.getUsers().then((users) => { this.setState({ users }); }); } onUserChange = (type: 'permissions' | 'voice_join_sound', event: ChangeEvent, index: number) => { this.setState({ showSavedMessage: false }); const users = [...this.state.users]; const val = type === 'permissions' ? parseInt(event.target.value) : event.target.value; users[index] = { ...users[index], [type]: val, }; this.setState({ users }); }; renderUsers = () => { return this.state.users.map((u: IUser, i: number) => { return ( {u.username} {u.email} this.onUserChange('permissions', e, i)} /> this.onUserChange('voice_join_sound', e, i)} /> ); }); }; save = (event: FormEvent) => { this.setState({ showSavedMessage: false }); event.preventDefault(); UserService.putUsers(this.state.users).then((users: IUser[]) => { this.setState({ users, showSavedMessage: true }); }); }; render() { return (
Users
{this.renderUsers()}
Username Email Permissions Join Sound

{this.state.showSavedMessage && Users updated}
); } }