Handle errors on group deletion

This commit is contained in:
Krzysztof Wolski 2020-04-29 08:47:08 +02:00
parent e7f6bd1e77
commit 3d7a638b20
13 changed files with 54 additions and 32 deletions

View file

@ -16,4 +16,10 @@ const props: PermissionDeleteDialogProps = {
storiesOf("Views / Permission Groups / Permission Group Delete", module) storiesOf("Views / Permission Groups / Permission Group Delete", module)
.addDecorator(Decorator) .addDecorator(Decorator)
.add("remove single", () => <PermissionGroupDeleteDialog {...props} />); .add("remove single", () => <PermissionGroupDeleteDialog {...props} />)
.add("Got error", () => (
<PermissionGroupDeleteDialog
{...props}
error={"Something went realy wrong."}
/>
));

View file

@ -4,17 +4,20 @@ import { FormattedMessage, useIntl } from "react-intl";
import ActionDialog from "@saleor/components/ActionDialog"; import ActionDialog from "@saleor/components/ActionDialog";
import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton";
import { Typography } from "@material-ui/core";
export interface PermissionDeleteDialogProps { export interface PermissionDeleteDialogProps {
confirmButtonState: ConfirmButtonTransitionState; confirmButtonState: ConfirmButtonTransitionState;
open: boolean; error?: string;
name: string; name: string;
onConfirm: () => void;
onClose: () => void; onClose: () => void;
onConfirm: () => void;
open: boolean;
} }
const PermissionGroupDeleteDialog: React.FC<PermissionDeleteDialogProps> = ({ const PermissionGroupDeleteDialog: React.FC<PermissionDeleteDialogProps> = ({
confirmButtonState, confirmButtonState,
error,
name, name,
onClose, onClose,
onConfirm, onConfirm,
@ -43,6 +46,7 @@ const PermissionGroupDeleteDialog: React.FC<PermissionDeleteDialogProps> = ({
}} }}
/> />
</DialogContentText> </DialogContentText>
{!!error && <Typography color="error">{error}</Typography>}
</ActionDialog> </ActionDialog>
); );
}; };

View file

@ -148,6 +148,7 @@ const PermissionGroupList: React.FC<PermissionGroupListProps> = props => {
<TableCell className={classes.colActions}> <TableCell className={classes.colActions}>
{permissionGroup ? ( {permissionGroup ? (
<> <>
{permissionGroup.userCanManage && (
<IconButton <IconButton
color="primary" color="primary"
onClick={stopPropagation(() => onClick={stopPropagation(() =>
@ -156,6 +157,7 @@ const PermissionGroupList: React.FC<PermissionGroupListProps> = props => {
> >
<DeleteIcon /> <DeleteIcon />
</IconButton> </IconButton>
)}
<IconButton color="primary"> <IconButton color="primary">
<EditIcon /> <EditIcon />
</IconButton> </IconButton>

View file

@ -16,6 +16,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: { node: {
id: "R3JvdXA6Mg==", id: "R3JvdXA6Mg==",
name: "Customer Support", name: "Customer Support",
userCanManage: true,
users: [ users: [
{ {
id: "VXNlcjoyMQ==", id: "VXNlcjoyMQ==",
@ -32,6 +33,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: { node: {
id: "R3JvdXA6MQ==", id: "R3JvdXA6MQ==",
name: "Full Access", name: "Full Access",
userCanManage: false,
users: [ users: [
{ {
id: "VXNlcjoyMQ==", id: "VXNlcjoyMQ==",
@ -49,6 +51,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
id: "R3JvdXA6NA==", id: "R3JvdXA6NA==",
name: "Management", name: "Management",
users: [], users: [],
userCanManage: true,
__typename: "Group" as "Group" __typename: "Group" as "Group"
}, },
__typename: "GroupCountableEdge" as "GroupCountableEdge" __typename: "GroupCountableEdge" as "GroupCountableEdge"
@ -57,6 +60,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: { node: {
id: "R3JvdXA6Mw==", id: "R3JvdXA6Mw==",
name: "Editors", name: "Editors",
userCanManage: true,
users: [ users: [
{ {
id: "VXNlcjoyMw==", id: "VXNlcjoyMw==",
@ -79,6 +83,7 @@ export const permissionGroups: PermissionGroupList_permissionGroups_edges_node[]
node: { node: {
id: "R3JvdXA6NQ==", id: "R3JvdXA6NQ==",
name: "Publishers", name: "Publishers",
userCanManage: true,
users: [], users: [],
__typename: "Group" as "Group" __typename: "Group" as "Group"
}, },
@ -104,6 +109,7 @@ export const userPermissionGroups: StaffMemberDetails_user_permissionGroups[] =
export const emptyPermissionGroup: PermissionGroupDetails_permissionGroup = { export const emptyPermissionGroup: PermissionGroupDetails_permissionGroup = {
id: "R3JvdXA6Mw==", id: "R3JvdXA6Mw==",
name: "Editors", name: "Editors",
userCanManage: true,
users: [], users: [],
__typename: "Group", __typename: "Group",
permissions: [ permissions: [
@ -131,6 +137,7 @@ export const errorsOfPermissionGroupCreate: PermissionGroupErrorFragment[] = [
export const permissionGroup: PermissionGroupDetails_permissionGroup = { export const permissionGroup: PermissionGroupDetails_permissionGroup = {
id: "R3JvdXA6Mw==", id: "R3JvdXA6Mw==",
name: "Editors", name: "Editors",
userCanManage: true,
users: [ users: [
{ {
id: "VXNlcjoyMg==", id: "VXNlcjoyMg==",

View file

@ -16,6 +16,7 @@ export const permissionGroupFragment = gql`
fragment PermissionGroupFragment on Group { fragment PermissionGroupFragment on Group {
id id
name name
userCanManage
users { users {
id id
firstName firstName

View file

@ -39,6 +39,7 @@ export interface PermissionGroupCreate_permissionGroupCreate_group {
__typename: "Group"; __typename: "Group";
id: string; id: string;
name: string; name: string;
userCanManage: boolean;
users: (PermissionGroupCreate_permissionGroupCreate_group_users | null)[] | null; users: (PermissionGroupCreate_permissionGroupCreate_group_users | null)[] | null;
permissions: (PermissionGroupCreate_permissionGroupCreate_group_permissions | null)[] | null; permissions: (PermissionGroupCreate_permissionGroupCreate_group_permissions | null)[] | null;
} }

View file

@ -33,6 +33,7 @@ export interface PermissionGroupDetails_permissionGroup {
__typename: "Group"; __typename: "Group";
id: string; id: string;
name: string; name: string;
userCanManage: boolean;
users: (PermissionGroupDetails_permissionGroup_users | null)[] | null; users: (PermissionGroupDetails_permissionGroup_users | null)[] | null;
permissions: (PermissionGroupDetails_permissionGroup_permissions | null)[] | null; permissions: (PermissionGroupDetails_permissionGroup_permissions | null)[] | null;
} }

View file

@ -33,6 +33,7 @@ export interface PermissionGroupDetailsFragment {
__typename: "Group"; __typename: "Group";
id: string; id: string;
name: string; name: string;
userCanManage: boolean;
users: (PermissionGroupDetailsFragment_users | null)[] | null; users: (PermissionGroupDetailsFragment_users | null)[] | null;
permissions: (PermissionGroupDetailsFragment_permissions | null)[] | null; permissions: (PermissionGroupDetailsFragment_permissions | null)[] | null;
} }

View file

@ -17,5 +17,6 @@ export interface PermissionGroupFragment {
__typename: "Group"; __typename: "Group";
id: string; id: string;
name: string; name: string;
userCanManage: boolean;
users: (PermissionGroupFragment_users | null)[] | null; users: (PermissionGroupFragment_users | null)[] | null;
} }

View file

@ -19,6 +19,7 @@ export interface PermissionGroupList_permissionGroups_edges_node {
__typename: "Group"; __typename: "Group";
id: string; id: string;
name: string; name: string;
userCanManage: boolean;
users: (PermissionGroupList_permissionGroups_edges_node_users | null)[] | null; users: (PermissionGroupList_permissionGroups_edges_node_users | null)[] | null;
} }

View file

@ -39,6 +39,7 @@ export interface PermissionGroupUpdate_permissionGroupUpdate_group {
__typename: "Group"; __typename: "Group";
id: string; id: string;
name: string; name: string;
userCanManage: boolean;
users: (PermissionGroupUpdate_permissionGroupUpdate_group_users | null)[] | null; users: (PermissionGroupUpdate_permissionGroupUpdate_group_users | null)[] | null;
permissions: (PermissionGroupUpdate_permissionGroupUpdate_group_permissions | null)[] | null; permissions: (PermissionGroupUpdate_permissionGroupUpdate_group_permissions | null)[] | null;
} }

View file

@ -18,6 +18,7 @@ import { usePermissionGroupListQuery } from "@saleor/permissionGroups/queries";
import { PermissionGroupDelete } from "@saleor/permissionGroups/types/PermissionGroupDelete"; import { PermissionGroupDelete } from "@saleor/permissionGroups/types/PermissionGroupDelete";
import { usePermissionGroupDelete } from "@saleor/permissionGroups/mutations"; import { usePermissionGroupDelete } from "@saleor/permissionGroups/mutations";
import { getStringOrPlaceholder } from "@saleor/misc"; import { getStringOrPlaceholder } from "@saleor/misc";
import getPermissionGroupErrorMessage from "@saleor/utils/errors/permissionGroups";
import PermissionGroupListPage from "../../components/PermissionGroupListPage"; import PermissionGroupListPage from "../../components/PermissionGroupListPage";
import { import {
permissionGroupListUrl, permissionGroupListUrl,
@ -74,6 +75,7 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
>(navigate, permissionGroupListUrl, params); >(navigate, permissionGroupListUrl, params);
const permissionGroups = data?.permissionGroups?.edges.map(edge => edge.node); const permissionGroups = data?.permissionGroups?.edges.map(edge => edge.node);
const [deleteError, setDeleteError] = React.useState<string>();
const handleDeleteSuccess = (data: PermissionGroupDelete) => { const handleDeleteSuccess = (data: PermissionGroupDelete) => {
if (data.permissionGroupDelete.errors.length === 0) { if (data.permissionGroupDelete.errors.length === 0) {
@ -83,7 +85,15 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
}) })
}); });
refetch(); refetch();
setDeleteError("");
closeModal(); closeModal();
} else {
setDeleteError(
getPermissionGroupErrorMessage(
data.permissionGroupDelete.errors[0],
intl
)
);
} }
}; };
@ -115,6 +125,7 @@ export const PermissionGroupList: React.FC<PermissionGroupListProps> = ({
} }
}) })
} }
error={deleteError}
name={getStringOrPlaceholder( name={getStringOrPlaceholder(
permissionGroups?.find(group => group.id === params.id)?.name permissionGroups?.find(group => group.id === params.id)?.name
)} )}

View file

@ -87464,6 +87464,12 @@ exports[`Storyshots Views / Permission Groups / Permission Group Create loading
</div> </div>
`; `;
exports[`Storyshots Views / Permission Groups / Permission Group Delete Got error 1`] = `
<div
style="padding:24px"
/>
`;
exports[`Storyshots Views / Permission Groups / Permission Group Delete remove single 1`] = ` exports[`Storyshots Views / Permission Groups / Permission Group Delete remove single 1`] = `
<div <div
style="padding:24px" style="padding:24px"
@ -90331,27 +90337,6 @@ exports[`Storyshots Views / Permission Groups / Permission Group List default 1`
<td <td
class="MuiTableCell-root-id MuiTableCell-body-id PermissionGroupList-colActions-id" 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 <button
class="MuiButtonBase-root-id MuiIconButton-root-id MuiIconButton-colorPrimary-id" class="MuiButtonBase-root-id MuiIconButton-root-id MuiIconButton-colorPrimary-id"
tabindex="0" tabindex="0"