content logo

React Forms:

Dynamic User List Form with React and Bootstrap

You can use this simple but very useful code to manage the website user. In this post we have two forms. The first form on the left side of the page takes the details of the new users and enters them into the users' licenses. The list of users is written on the right side of the page. There is also a drop-down list in the middle of the page that includes all users. By selecting each user from the items in the list, the user profile can be edited.

#

Dynamic User List Code

#

Bootstrap React Form Code

#

HTML React Form Code

#

Responsive React Form

<!-- This script got from frontendfreecode.com -->
<div id="root"></div><a style="font-size: 8pt; text-decoration: none" target="_blank" href="http://frontendfreecode.com">Free Frontend</a>
                                                                            
function generateRandomId(h = 16, s = s => Math.floor(s).toString(h)) {
    return s(Date.now() / 1000) + ' '.repeat(h).replace(/./g, () => s(Math.random() * h));
}
function UserListItem(props) {
    let { user } = props;
    return /*#__PURE__*/(
        React.createElement("ul", null, /*#__PURE__*/
            React.createElement("li", null, "First Name: ", user.first_name), /*#__PURE__*/
            React.createElement("li", null, "Last Name: ", user.last_name), /*#__PURE__*/
            React.createElement("li", null, "Email: ", user.email)));
}
function UserList(props) {
    let { users } = props;
    let listItems = users.map(user => /*#__PURE__*/React.createElement(UserListItem, { user: user, key: user.id }));
    return /*#__PURE__*/(
        React.createElement("div", null, /*#__PURE__*/
            React.createElement("h3", null, "User List"),
            listItems));
}
function TextFormGroup(props) {
    let { name, title, type, value, handleInputChange } = props;
    return /*#__PURE__*/(
        React.createElement("div", { className: "form-group" }, /*#__PURE__*/
            React.createElement("label", { className: "sr-only", htmlFor: name }, title), /*#__PURE__*/
            React.createElement("input", {
                type: type || "text",
                className: `${name} form-control`,
                name: name,
                placeholder: title,
                value: value,
                onChange: handleInputChange
            })));
}
function UserFormGroups(props) {
    let user = props.user || {};
    return (
        [/*#__PURE__*/
            React.createElement(TextFormGroup, {
                name: "first_name",
                title: "First Name",
                value: user.first_name,
                handleInputChange: props.handleInputChange
            }), /*#__PURE__*/
            React.createElement(TextFormGroup, {
                name: "last_name",
                title: "Last Name",
                value: user.last_name,
                handleInputChange: props.handleInputChange
            }), /*#__PURE__*/
            React.createElement(TextFormGroup, {
                name: "email",
                title: "Email",
                type: "email",
                value: user.email,
                handleInputChange: props.handleInputChange
            })]);
}
function AddUserForm(props) {
    return /*#__PURE__*/(
        React.createElement("form", { onSubmit: event => props.handleSubmit(event) }, /*#__PURE__*/
            React.createElement("h3", null, "Add User Form"), /*#__PURE__*/
            React.createElement(UserFormGroups, null), /*#__PURE__*/
            React.createElement("button", { type: "submit", className: "btn btn-default" }, "Save")));
}
class EditUserForm extends React.Component {
    constructor(props) {
        super(props);
        this.state = this.get_initialState();
        this.select_editedUser = this.select_editedUser.bind(this);
        this.handleInputChange = this.handleInputChange.bind(this);
    }
    get_initialState() {
        let initial_state = {
            id: undefined,
            first_name: '',
            last_name: '',
            email: ''
        };
        return initial_state;
    }
    select_editedUser(event) {
        let user_id = event.target.value;
        let editedUser;
        if (user_id) {
            editedUser = this.props.users.find(user => user.id === user_id);
        } else {
            editedUser = this.get_initialState();
        }
        this.setState({
            id: user_id,
            ...editedUser
        });
    }
    handleInputChange(event) {
        const target = event.target;
        const value = target.type === 'checkbox' ? target.checked : target.value;
        const name = target.name;
        this.setState({
            [name]: value
        });
    }
    resetForm() {
        this.setState(this.get_initialState());
    }
    render() {
        let { users, handleSubmit } = this.props;
        let options = users.map(user => /*#__PURE__*/React.createElement("option", { value: user.id, key: user.id }, user.email));
        return /*#__PURE__*/(
            React.createElement("form", {
                onSubmit: event => {
                    handleSubmit(event, this.state);
                    this.resetForm();
                }
            }, /*#__PURE__*/
                React.createElement("h3", null, "Edit User Form"), /*#__PURE__*/
                React.createElement("div", { className: "form-group" }, /*#__PURE__*/
                    React.createElement("label", { className: "sr-only", htmlFor: "select_user" }, "Select User"), /*#__PURE__*/
                    React.createElement("select", {
                        value: this.state.id,
                        onChange: event => this.select_editedUser(event),
                        className: "select_user form-control"
                    }, /*#__PURE__*/
                        React.createElement("option", { value: "" }, "Please select user first.."),
                        options)),
                this.state.id === undefined ?
                    null : /*#__PURE__*/
                    React.createElement(UserFormGroups, {
                        user: this.state,
                        handleInputChange: this.handleInputChange
                    }), /*#__PURE__*/
                React.createElement("button", { type: "submit", className: "btn btn-default" }, "Save")));
    }
}
class App extends React.Component {
    constructor(props) {
        super(props);
        let users = [
            {
                "id": "5aedbd8692b696a8f35e890d",
                "first_name": "User1",
                "last_name": "Family",
                "email": "user1@email.com",
                "gender": "Male"
            },
            {
                "id": "5aedbd90352ea61f53ed330b",
                "first_name": "User2",
                "last_name": "Family",
                "email": "user2@email.com",
                "gender": "Female"
            }];
        this.state = { users };
        this.addUser = this.addUser.bind(this);
        this.editUser = this.editUser.bind(this);
    }
    addUser(event) {
        event.preventDefault();
        let form = event.target;
        const getFormValue = className => form.getElementsByClassName(className)[0].value;
        this.setState((prevState, props) => {
            let new_id = generateRandomId();
            let new_user = {
                id: new_id,
                first_name: getFormValue('first_name'),
                last_name: getFormValue('last_name'),
                email: getFormValue('email')
            };
            let users = prevState.users;
            users.push(new_user);
            form.reset();
            return { users };
        });
    }
    editUser(event, new_user_data) {
        event.preventDefault();
        let form = event.target;
        this.setState((prevState, props) => {
            let user_id = new_user_data.id;
            let users = prevState.users;
            let new_users = users.map(user => {
                let selected_user = user.id === user_id;
                if (selected_user) {
                    return new_user_data;
                } else {
                    return user;
                }
            });
            form.reset();
            return { users: new_users };
        });
    }
    render() {
        return /*#__PURE__*/(
            React.createElement("div", { className: "container" }, /*#__PURE__*/
                React.createElement("div", { className: "row" }, /*#__PURE__*/
                    React.createElement("div", { className: "col-md-3" }, /*#__PURE__*/
                        React.createElement(AddUserForm, { handleSubmit: this.addUser })), /*#__PURE__*/
                    React.createElement("div", { className: "col-md-3" }, /*#__PURE__*/
                        React.createElement(EditUserForm, { users: this.state.users, handleSubmit: this.editUser })), /*#__PURE__*/
                    React.createElement("div", { className: "col-md-3" }, /*#__PURE__*/
                        React.createElement(UserList, { users: this.state.users })))));
    }
}
ReactDOM.render( /*#__PURE__*/
    React.createElement(App, null),
    document.getElementById('root'));
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'>
<script src='https://unpkg.com/react/umd/react.development.js'></script>
<script src='https://unpkg.com/react-dom/umd/react-dom.development.js'></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- This script got from frontendfreecode.com -->

<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css'>
<script src='https://unpkg.com/react/umd/react.development.js'></script>
<script src='https://unpkg.com/react-dom/umd/react-dom.development.js'></script>
</head>
<body>
<div id="root"></div><div id="bcl"><a style="font-size:8pt;text-decoration:none;" href="http://www.devanswer.com">Free Frontend</a></div>
<script>
function generateRandomId(h = 16, s = s => Math.floor(s).toString(h)) {
    return s(Date.now() / 1000) + ' '.repeat(h).replace(/./g, () => s(Math.random() * h));
}
function UserListItem(props) {
    let { user } = props;
    return /*#__PURE__*/(
        React.createElement("ul", null, /*#__PURE__*/
            React.createElement("li", null, "First Name: ", user.first_name), /*#__PURE__*/
            React.createElement("li", null, "Last Name: ", user.last_name), /*#__PURE__*/
            React.createElement("li", null, "Email: ", user.email)));
}
function UserList(props) {
    let { users } = props;
    let listItems = users.map(user => /*#__PURE__*/React.createElement(UserListItem, { user: user, key: user.id }));
    return /*#__PURE__*/(
        React.createElement("div", null, /*#__PURE__*/
            React.createElement("h3", null, "User List"),
            listItems));
}
function TextFormGroup(props) {
    let { name, title, type, value, handleInputChange } = props;
    return /*#__PURE__*/(
        React.createElement("div", { className: "form-group" }, /*#__PURE__*/
            React.createElement("label", { className: "sr-only", htmlFor: name }, title), /*#__PURE__*/
            React.createElement("input", {
                type: type || "text",
                className: `${name} form-control`,
                name: name,
                placeholder: title,
                value: value,
                onChange: handleInputChange
            })));
}
function UserFormGroups(props) {
    let user = props.user || {};
    return (
        [/*#__PURE__*/
            React.createElement(TextFormGroup, {
                name: "first_name",
                title: "First Name",
                value: user.first_name,
                handleInputChange: props.handleInputChange
            }), /*#__PURE__*/
            React.createElement(TextFormGroup, {
                name: "last_name",
                title: "Last Name",
                value: user.last_name,
                handleInputChange: props.handleInputChange
            }), /*#__PURE__*/
            React.createElement(TextFormGroup, {
                name: "email",
                title: "Email",
                type: "email",
                value: user.email,
                handleInputChange: props.handleInputChange
            })]);
}
function AddUserForm(props) {
    return /*#__PURE__*/(
        React.createElement("form", { onSubmit: event => props.handleSubmit(event) }, /*#__PURE__*/
            React.createElement("h3", null, "Add User Form"), /*#__PURE__*/
            React.createElement(UserFormGroups, null), /*#__PURE__*/
            React.createElement("button", { type: "submit", className: "btn btn-default" }, "Save")));
}
class EditUserForm extends React.Component {
    constructor(props) {
        super(props);
        this.state = this.get_initialState();
        this.select_editedUser = this.select_editedUser.bind(this);
        this.handleInputChange = this.handleInputChange.bind(this);
    }
    get_initialState() {
        let initial_state = {
            id: undefined,
            first_name: '',
            last_name: '',
            email: ''
        };
        return initial_state;
    }
    select_editedUser(event) {
        let user_id = event.target.value;
        let editedUser;
        if (user_id) {
            editedUser = this.props.users.find(user => user.id === user_id);
        } else {
            editedUser = this.get_initialState();
        }
        this.setState({
            id: user_id,
            ...editedUser
        });
    }
    handleInputChange(event) {
        const target = event.target;
        const value = target.type === 'checkbox' ? target.checked : target.value;
        const name = target.name;
        this.setState({
            [name]: value
        });
    }
    resetForm() {
        this.setState(this.get_initialState());
    }
    render() {
        let { users, handleSubmit } = this.props;
        let options = users.map(user => /*#__PURE__*/React.createElement("option", { value: user.id, key: user.id }, user.email));
        return /*#__PURE__*/(
            React.createElement("form", {
                onSubmit: event => {
                    handleSubmit(event, this.state);
                    this.resetForm();
                }
            }, /*#__PURE__*/
                React.createElement("h3", null, "Edit User Form"), /*#__PURE__*/
                React.createElement("div", { className: "form-group" }, /*#__PURE__*/
                    React.createElement("label", { className: "sr-only", htmlFor: "select_user" }, "Select User"), /*#__PURE__*/
                    React.createElement("select", {
                        value: this.state.id,
                        onChange: event => this.select_editedUser(event),
                        className: "select_user form-control"
                    }, /*#__PURE__*/
                        React.createElement("option", { value: "" }, "Please select user first.."),
                        options)),
                this.state.id === undefined ?
                    null : /*#__PURE__*/
                    React.createElement(UserFormGroups, {
                        user: this.state,
                        handleInputChange: this.handleInputChange
                    }), /*#__PURE__*/
                React.createElement("button", { type: "submit", className: "btn btn-default" }, "Save")));
    }
}
class App extends React.Component {
    constructor(props) {
        super(props);
        let users = [
            {
                "id": "5aedbd8692b696a8f35e890d",
                "first_name": "User1",
                "last_name": "Family",
                "email": "user1@email.com",
                "gender": "Male"
            },
            {
                "id": "5aedbd90352ea61f53ed330b",
                "first_name": "User2",
                "last_name": "Family",
                "email": "user2@email.com",
                "gender": "Female"
            }];
        this.state = { users };
        this.addUser = this.addUser.bind(this);
        this.editUser = this.editUser.bind(this);
    }
    addUser(event) {
        event.preventDefault();
        let form = event.target;
        const getFormValue = className => form.getElementsByClassName(className)[0].value;
        this.setState((prevState, props) => {
            let new_id = generateRandomId();
            let new_user = {
                id: new_id,
                first_name: getFormValue('first_name'),
                last_name: getFormValue('last_name'),
                email: getFormValue('email')
            };
            let users = prevState.users;
            users.push(new_user);
            form.reset();
            return { users };
        });
    }
    editUser(event, new_user_data) {
        event.preventDefault();
        let form = event.target;
        this.setState((prevState, props) => {
            let user_id = new_user_data.id;
            let users = prevState.users;
            let new_users = users.map(user => {
                let selected_user = user.id === user_id;
                if (selected_user) {
                    return new_user_data;
                } else {
                    return user;
                }
            });
            form.reset();
            return { users: new_users };
        });
    }
    render() {
        return /*#__PURE__*/(
            React.createElement("div", { className: "container" }, /*#__PURE__*/
                React.createElement("div", { className: "row" }, /*#__PURE__*/
                    React.createElement("div", { className: "col-md-3" }, /*#__PURE__*/
                        React.createElement(AddUserForm, { handleSubmit: this.addUser })), /*#__PURE__*/
                    React.createElement("div", { className: "col-md-3" }, /*#__PURE__*/
                        React.createElement(EditUserForm, { users: this.state.users, handleSubmit: this.editUser })), /*#__PURE__*/
                    React.createElement("div", { className: "col-md-3" }, /*#__PURE__*/
                        React.createElement(UserList, { users: this.state.users })))));
    }
}
ReactDOM.render( /*#__PURE__*/
    React.createElement(App, null),
    document.getElementById('root'));
</script>

</body>
</html>
Preview