Skip to content

Commit

Permalink
Merge pull request #508 from mirumee/fix/error-on-group-deletion
Browse files Browse the repository at this point in the history
Handle errors on group deletion
  • Loading branch information
dominik-zeglen authored Apr 30, 2020
2 parents 1d42b62 + da950ce commit 87fcc81
Show file tree
Hide file tree
Showing 13 changed files with 85 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,20 @@ import PermissionGroupDeleteDialog, {
PermissionDeleteDialogProps
} from "@saleor/permissionGroups/components/PermissionGroupDeleteDialog";
import Decorator from "@saleor/storybook/Decorator";
import { PermissionGroupErrorFragment } from "@saleor/permissionGroups/types/PermissionGroupErrorFragment";
import { PermissionGroupErrorCode } from "@saleor/types/globalTypes";

const permissionsError: PermissionGroupErrorFragment = {
__typename: "PermissionGroupError",
code: PermissionGroupErrorCode.OUT_OF_SCOPE_PERMISSION,
field: null
};

const requiredError: PermissionGroupErrorFragment = {
__typename: "PermissionGroupError",
code: PermissionGroupErrorCode.REQUIRED,
field: null
};

const props: PermissionDeleteDialogProps = {
confirmButtonState: "default",
Expand All @@ -16,4 +30,10 @@ const props: PermissionDeleteDialogProps = {

storiesOf("Views / Permission Groups / Permission Group Delete", module)
.addDecorator(Decorator)
.add("remove single", () => <PermissionGroupDeleteDialog {...props} />);
.add("remove single", () => <PermissionGroupDeleteDialog {...props} />)
.add("Got permissions error", () => (
<PermissionGroupDeleteDialog {...props} error={permissionsError} />
))
.add("Get random permission group error", () => (
<PermissionGroupDeleteDialog {...props} error={requiredError} />
));
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,41 @@ import { FormattedMessage, useIntl } from "react-intl";

import ActionDialog from "@saleor/components/ActionDialog";
import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton";
import { Typography } from "@material-ui/core";
import { PermissionGroupErrorFragment } from "@saleor/permissionGroups/types/PermissionGroupErrorFragment";
import getPermissionGroupErrorMessage from "@saleor/utils/errors/permissionGroups";
import { PermissionGroupErrorCode } from "@saleor/types/globalTypes";

export interface PermissionDeleteDialogProps {
confirmButtonState: ConfirmButtonTransitionState;
open: boolean;
error?: PermissionGroupErrorFragment;
name: string;
onConfirm: () => void;
onClose: () => void;
onConfirm: () => void;
open: boolean;
}

const PermissionGroupDeleteDialog: React.FC<PermissionDeleteDialogProps> = ({
confirmButtonState,
error,
name,
onClose,
onConfirm,
open
}) => {
const intl = useIntl();

let errorMessage;
if (error?.code === PermissionGroupErrorCode.OUT_OF_SCOPE_PERMISSION) {
errorMessage = intl.formatMessage({
defaultMessage:
"Cant's delete group which is out of your permission scope",
description: "deletion error message"
});
} else if (!!error) {
errorMessage = getPermissionGroupErrorMessage(error, intl);
}

return (
<ActionDialog
open={open}
Expand All @@ -43,6 +60,7 @@ const PermissionGroupDeleteDialog: React.FC<PermissionDeleteDialogProps> = ({
}}
/>
</DialogContentText>
{!!errorMessage && <Typography color="error">{errorMessage}</Typography>}
</ActionDialog>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,14 +148,16 @@ const PermissionGroupList: React.FC<PermissionGroupListProps> = props => {
<TableCell className={classes.colActions}>
{permissionGroup ? (
<>
<IconButton
color="primary"
onClick={stopPropagation(() =>
onDelete(permissionGroup.id)
)}
>
<DeleteIcon />
</IconButton>
{permissionGroup.userCanManage && (
<IconButton
color="primary"
onClick={stopPropagation(() =>
onDelete(permissionGroup.id)
)}
>
<DeleteIcon />
</IconButton>
)}
<IconButton color="primary">
<EditIcon />
</IconButton>
Expand Down
7 changes: 7 additions & 0 deletions src/permissionGroups/fixtures.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: {
id: "R3JvdXA6Mg==",
name: "Customer Support",
userCanManage: true,
users: [
{
id: "VXNlcjoyMQ==",
Expand All @@ -32,6 +33,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: {
id: "R3JvdXA6MQ==",
name: "Full Access",
userCanManage: false,
users: [
{
id: "VXNlcjoyMQ==",
Expand All @@ -49,6 +51,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
id: "R3JvdXA6NA==",
name: "Management",
users: [],
userCanManage: true,
__typename: "Group" as "Group"
},
__typename: "GroupCountableEdge" as "GroupCountableEdge"
Expand All @@ -57,6 +60,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: {
id: "R3JvdXA6Mw==",
name: "Editors",
userCanManage: true,
users: [
{
id: "VXNlcjoyMw==",
Expand All @@ -79,6 +83,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: {
id: "R3JvdXA6NQ==",
name: "Publishers",
userCanManage: true,
users: [],
__typename: "Group" as "Group"
},
Expand All @@ -104,6 +109,7 @@ export const userPermissionGroups: StaffMemberDetails_user_permissionGroups[] =
export const emptyPermissionGroup: PermissionGroupDetails_permissionGroup = {
id: "R3JvdXA6Mw==",
name: "Editors",
userCanManage: true,
users: [],
__typename: "Group",
permissions: [
Expand Down Expand Up @@ -131,6 +137,7 @@ export const errorsOfPermissionGroupCreate: PermissionGroupErrorFragment[] = [
export const permissionGroup: PermissionGroupDetails_permissionGroup = {
id: "R3JvdXA6Mw==",
name: "Editors",
userCanManage: true,
users: [
{
id: "VXNlcjoyMg==",
Expand Down
1 change: 1 addition & 0 deletions src/permissionGroups/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export const permissionGroupFragment = gql`
fragment PermissionGroupFragment on Group {
id
name
userCanManage
users {
id
firstName
Expand Down
1 change: 1 addition & 0 deletions src/permissionGroups/types/PermissionGroupCreate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export interface PermissionGroupCreate_permissionGroupCreate_group {
__typename: "Group";
id: string;
name: string;
userCanManage: boolean;
users: (PermissionGroupCreate_permissionGroupCreate_group_users | null)[] | null;
permissions: (PermissionGroupCreate_permissionGroupCreate_group_permissions | null)[] | null;
}
Expand Down
1 change: 1 addition & 0 deletions src/permissionGroups/types/PermissionGroupDetails.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export interface PermissionGroupDetails_permissionGroup {
__typename: "Group";
id: string;
name: string;
userCanManage: boolean;
users: (PermissionGroupDetails_permissionGroup_users | null)[] | null;
permissions: (PermissionGroupDetails_permissionGroup_permissions | null)[] | null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export interface PermissionGroupDetailsFragment {
__typename: "Group";
id: string;
name: string;
userCanManage: boolean;
users: (PermissionGroupDetailsFragment_users | null)[] | null;
permissions: (PermissionGroupDetailsFragment_permissions | null)[] | null;
}
1 change: 1 addition & 0 deletions src/permissionGroups/types/PermissionGroupFragment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ export interface PermissionGroupFragment {
__typename: "Group";
id: string;
name: string;
userCanManage: boolean;
users: (PermissionGroupFragment_users | null)[] | null;
}
1 change: 1 addition & 0 deletions src/permissionGroups/types/PermissionGroupList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export interface PermissionGroupList_permissionGroups_edges_node {
__typename: "Group";
id: string;
name: string;
userCanManage: boolean;
users: (PermissionGroupList_permissionGroups_edges_node_users | null)[] | null;
}

Expand Down
1 change: 1 addition & 0 deletions src/permissionGroups/types/PermissionGroupUpdate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export interface PermissionGroupUpdate_permissionGroupUpdate_group {
__typename: "Group";
id: string;
name: string;
userCanManage: boolean;
users: (PermissionGroupUpdate_permissionGroupUpdate_group_users | null)[] | null;
permissions: (PermissionGroupUpdate_permissionGroupUpdate_group_permissions | null)[] | null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { usePermissionGroupListQuery } from "@saleor/permissionGroups/queries";
import { PermissionGroupDelete } from "@saleor/permissionGroups/types/PermissionGroupDelete";
import { usePermissionGroupDelete } from "@saleor/permissionGroups/mutations";
import { getStringOrPlaceholder } from "@saleor/misc";
import { PermissionGroupErrorFragment } from "@saleor/permissionGroups/types/PermissionGroupErrorFragment";
import PermissionGroupListPage from "../../components/PermissionGroupListPage";
import {
permissionGroupListUrl,
Expand Down Expand Up @@ -74,6 +75,9 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
>(navigate, permissionGroupListUrl, params);

const permissionGroups = data?.permissionGroups?.edges.map(edge => edge.node);
const [deleteError, setDeleteError] = React.useState<
PermissionGroupErrorFragment
>();

const handleDeleteSuccess = (data: PermissionGroupDelete) => {
if (data.permissionGroupDelete.errors.length === 0) {
Expand All @@ -83,7 +87,10 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
})
});
refetch();
setDeleteError(undefined);
closeModal();
} else {
setDeleteError(data.permissionGroupDelete.errors[0]);
}
};

Expand Down Expand Up @@ -115,6 +122,7 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
}
})
}
error={deleteError}
name={getStringOrPlaceholder(
permissionGroups?.find(group => group.id === params.id)?.name
)}
Expand Down
33 changes: 12 additions & 21 deletions src/storybook/__snapshots__/Stories.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -89802,6 +89802,18 @@ exports[`Storyshots Views / Permission Groups / Permission Group Create loading
</div>
`;

exports[`Storyshots Views / Permission Groups / Permission Group Delete Get random permission group error 1`] = `
<div
style="padding:24px"
/>
`;

exports[`Storyshots Views / Permission Groups / Permission Group Delete Got permissions error 1`] = `
<div
style="padding:24px"
/>
`;

exports[`Storyshots Views / Permission Groups / Permission Group Delete remove single 1`] = `
<div
style="padding:24px"
Expand Down Expand Up @@ -92669,27 +92681,6 @@ exports[`Storyshots Views / Permission Groups / Permission Group List default 1`
<td
class="MuiTableCell-root-id MuiTableCell-body-id PermissionGroupList-colActions-id"
>
<button
class="MuiButtonBase-root-id MuiIconButton-root-id MuiIconButton-colorPrimary-id"
tabindex="0"
type="button"
>
<span
class="MuiIconButton-label-id"
>
<svg
aria-hidden="true"
class="MuiSvgIcon-root-id"
focusable="false"
role="presentation"
viewBox="0 0 24 24"
>
<path
d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"
/>
</svg>
</span>
</button>
<button
class="MuiButtonBase-root-id MuiIconButton-root-id MuiIconButton-colorPrimary-id"
tabindex="0"
Expand Down

0 comments on commit 87fcc81

Please sign in to comment.