Fix create user form for team admin (#5105)

This commit is contained in:
gillespi314 2022-04-13 11:01:53 -05:00 committed by GitHub
parent a05c66a27b
commit 9476e92693
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 41 deletions

View file

@ -51,11 +51,6 @@ interface ITeamsResponse {
teams: ITeam[];
}
// This is used to cache the table query data and make a request for the
// members data at a future time. Practically, this allows us to re-fetch the users
// with the same table query params after we have made an edit to a user.
let tableQueryData = {};
const MembersPage = ({
params: { team_id },
}: IMembersPageProps): JSX.Element => {
@ -206,19 +201,6 @@ const MembersPage = ({
[teamId, toggleAddUserModal, currentTeam?.name, refetchUsers]
);
const fetchUsers = useCallback(
(fetchParams: IFetchParams) => {
const { pageIndex, pageSize, searchQuery } = fetchParams;
usersAPI.loadAll({
page: pageIndex,
perPage: pageSize,
globalFilter: searchQuery,
teamId,
});
},
[teamId]
);
const onCreateMemberSubmit = (formData: IFormData) => {
setIsFormSubmitting(true);
@ -237,12 +219,12 @@ const MembersPage = ({
"success",
`An invitation email was sent from ${config?.smtp_settings.sender_address} to ${formData.email}.`
);
fetchUsers(tableQueryData);
refetchUsers();
toggleCreateMemberModal();
})
.catch((userErrors: { data: IApiError }) => {
if (
userErrors.data.errors[0].reason.includes(
userErrors.data.errors?.[0].reason.includes(
"a user with this account already exists"
)
) {
@ -250,8 +232,8 @@ const MembersPage = ({
email: "A user with this email address already exists",
});
} else if (
userErrors.data.errors[0].reason.includes("Invite") &&
userErrors.data.errors[0].reason.includes("already exists")
userErrors.data.errors?.[0].reason.includes("Invite") &&
userErrors.data.errors?.[0].reason.includes("already exists")
) {
setCreateUserErrors({
email: "A user with this email address has already been invited",
@ -273,16 +255,16 @@ const MembersPage = ({
.createUserWithoutInvitation(requestData)
.then(() => {
renderFlash("success", `Successfully created ${requestData.name}.`);
fetchUsers(tableQueryData);
refetchUsers();
toggleCreateMemberModal();
})
.catch((userErrors: { data: IApiError }) => {
if (userErrors.data.errors[0].reason.includes("Duplicate")) {
if (userErrors.data.errors?.[0].reason.includes("Duplicate")) {
setCreateUserErrors({
email: "A user with this email address already exists",
});
} else if (
userErrors.data.errors[0].reason.includes("already invited")
userErrors.data.errors?.[0].reason.includes("already invited")
) {
setCreateUserErrors({
email: "A user with this email address has already been invited",
@ -328,7 +310,7 @@ const MembersPage = ({
window.location.href = "/";
}
} else {
refetchUsers(tableQueryData);
refetchUsers();
}
setIsFormSubmitting(false);
toggleEditMemberModal();
@ -349,17 +331,6 @@ const MembersPage = ({
[toggleEditMemberModal, userEditing, refetchUsers]
);
const onQueryChange = useCallback(
(queryData) => {
if (members) {
setSearchString(queryData.searchQuery);
tableQueryData = { ...queryData, teamId };
refetchUsers(queryData);
}
},
[refetchUsers, teamId, setSearchString]
);
const onActionSelection = (action: string, user: IUser): void => {
switch (action) {
case "edit":
@ -435,7 +406,7 @@ const MembersPage = ({
actionButtonText={"Add member"}
actionButtonVariant={"brand"}
hideActionButton={memberIds.length === 0 && searchString === ""}
onQueryChange={onQueryChange}
onQueryChange={({ searchQuery }) => setSearchString(searchQuery)}
inputPlaceHolder={"Search"}
emptyComponent={NoMembersComponent}
showMarkAllPages={false}
@ -476,9 +447,7 @@ const MembersPage = ({
createUserErrors={createUserErrors}
onCancel={toggleCreateMemberModal}
onSubmit={onCreateMemberSubmit}
defaultGlobalRole={userEditing?.global_role}
defaultTeamRole={userEditing?.role}
defaultTeams={userEditing?.teams}
defaultTeams={[{ id: teamId, name: "", role: "observer" }]}
availableTeams={teams}
isPremiumTier={isPremiumTier || false}
smtpConfigured={smtpConfigured}

View file

@ -40,6 +40,7 @@ interface IDataColumn {
| ((props: IDropdownCellProps) => JSX.Element);
disableHidden?: boolean;
disableSortBy?: boolean;
sortType?: string;
}
export interface IMembersTableData {
@ -61,6 +62,7 @@ const generateTableHeaders = (
title: "Name",
Header: "Name",
disableSortBy: true,
sortType: "caseInsensitive",
accessor: "name",
Cell: (cellProps: ICellProps) => (
<TextCell value={cellProps.cell.value} />