mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-06 00:07:44 +01:00
672a3f0b92
* fix: group project access inconsistencies * fix relative path * wip * refactor: make project tabs work as routes * refactor: finish refactoring project assign forms * fix: update snaps * fix: update snaps * add some basic cypress e2e tests to groups * add remaining cypress e2e tests for group CRUD * add groups e2e to gh workflows * refactor: simplify useMemo usage * add GO_BACK navigate const * fix: remove trailing slash on user creation request Co-authored-by: olav <mail@olav.io> Co-authored-by: Fredrik Strand Oseberg <fredrik.no@gmail.com>
108 lines
3.7 KiB
TypeScript
108 lines
3.7 KiB
TypeScript
import { useNavigate } from 'react-router-dom';
|
|
import UserForm from '../UserForm/UserForm';
|
|
import useAddUserForm from '../hooks/useAddUserForm';
|
|
import { scrollToTop } from 'component/common/util';
|
|
import { useEffect } from 'react';
|
|
import { UpdateButton } from 'component/common/UpdateButton/UpdateButton';
|
|
import FormTemplate from 'component/common/FormTemplate/FormTemplate';
|
|
import { ADMIN } from 'component/providers/AccessProvider/permissions';
|
|
import { EDIT } from 'constants/misc';
|
|
import useAdminUsersApi from 'hooks/api/actions/useAdminUsersApi/useAdminUsersApi';
|
|
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
|
|
import useUserInfo from 'hooks/api/getters/useUserInfo/useUserInfo';
|
|
import useToast from 'hooks/useToast';
|
|
import { formatUnknownError } from 'utils/formatUnknownError';
|
|
import { useRequiredPathParam } from 'hooks/useRequiredPathParam';
|
|
import { GO_BACK } from 'constants/navigate';
|
|
|
|
const EditUser = () => {
|
|
useEffect(() => {
|
|
scrollToTop();
|
|
}, []);
|
|
const { uiConfig } = useUiConfig();
|
|
const { setToastData, setToastApiError } = useToast();
|
|
const id = useRequiredPathParam('id');
|
|
const { user, refetch } = useUserInfo(id);
|
|
const { updateUser, userLoading: loading } = useAdminUsersApi();
|
|
const navigate = useNavigate();
|
|
const {
|
|
name,
|
|
setName,
|
|
email,
|
|
setEmail,
|
|
sendEmail,
|
|
setSendEmail,
|
|
rootRole,
|
|
setRootRole,
|
|
getAddUserPayload,
|
|
validateName,
|
|
errors,
|
|
clearErrors,
|
|
} = useAddUserForm(user?.name, user?.email, user?.rootRole);
|
|
|
|
const formatApiCode = () => {
|
|
return `curl --location --request PUT '${
|
|
uiConfig.unleashUrl
|
|
}/api/admin/user-admin/${id}' \\
|
|
--header 'Authorization: INSERT_API_KEY' \\
|
|
--header 'Content-Type: application/json' \\
|
|
--data-raw '${JSON.stringify(getAddUserPayload(), undefined, 2)}'`;
|
|
};
|
|
|
|
const handleSubmit = async (e: Event) => {
|
|
e.preventDefault();
|
|
const payload = getAddUserPayload();
|
|
const validName = validateName();
|
|
|
|
if (validName) {
|
|
try {
|
|
await updateUser({ ...payload, id });
|
|
refetch();
|
|
navigate('/admin/users');
|
|
setToastData({
|
|
title: 'User information updated',
|
|
type: 'success',
|
|
});
|
|
} catch (error: unknown) {
|
|
setToastApiError(formatUnknownError(error));
|
|
}
|
|
}
|
|
};
|
|
|
|
const handleCancel = () => {
|
|
navigate(GO_BACK);
|
|
};
|
|
|
|
return (
|
|
<FormTemplate
|
|
loading={loading}
|
|
title="Edit user"
|
|
description="In order to get access to Unleash needs to have an Unleash root role as Admin, Editor or Viewer.
|
|
You can also add the user to projects as member or owner in the specific projects."
|
|
documentationLink="https://docs.getunleash.io/user_guide/rbac#standard-roles"
|
|
documentationLinkLabel="User management documentation"
|
|
formatApiCode={formatApiCode}
|
|
>
|
|
<UserForm
|
|
errors={errors}
|
|
handleSubmit={handleSubmit}
|
|
handleCancel={handleCancel}
|
|
name={name}
|
|
setName={setName}
|
|
email={email}
|
|
setEmail={setEmail}
|
|
sendEmail={sendEmail}
|
|
setSendEmail={setSendEmail}
|
|
rootRole={rootRole}
|
|
setRootRole={setRootRole}
|
|
clearErrors={clearErrors}
|
|
mode={EDIT}
|
|
>
|
|
<UpdateButton permission={ADMIN} />
|
|
</UserForm>
|
|
</FormTemplate>
|
|
);
|
|
};
|
|
|
|
export default EditUser;
|