client/app/pages/users/components/ToggleUserForm.jsx (45 lines of code) (raw):
import React, { useState, useCallback } from "react";
import PropTypes from "prop-types";
import Button from "antd/lib/button";
import DynamicComponent from "@/components/DynamicComponent";
import { UserProfile } from "@/components/proptypes";
import { currentUser } from "@/services/auth";
import User from "@/services/user";
import useImmutableCallback from "@/lib/hooks/useImmutableCallback";
export default function ToggleUserForm(props) {
const { user, onChange } = props;
const [loading, setLoading] = useState(false);
const handleChange = useImmutableCallback(onChange);
const toggleUser = useCallback(() => {
const action = user.isDisabled ? User.enableUser : User.disableUser;
setLoading(true);
action(user)
.then(data => {
if (data) {
handleChange(User.convertUserInfo(data));
}
})
.finally(() => {
setLoading(false);
});
}, [user, handleChange]);
if (!currentUser.isAdmin || user.id === currentUser.id) {
return null;
}
const buttonProps = {
type: user.isDisabled ? "primary" : "danger",
children: user.isDisabled ? "Enable User" : "Disable User",
};
return (
<DynamicComponent name="UserProfile.ToggleUserForm">
<Button className="w-100 m-t-10" onClick={toggleUser} loading={loading} {...buttonProps} />
</DynamicComponent>
);
}
ToggleUserForm.propTypes = {
user: UserProfile.isRequired,
onChange: PropTypes.func,
};
ToggleUserForm.defaultProps = {
onChange: () => {},
};