Handle errors on group deletion
This commit is contained in:
parent
e7f6bd1e77
commit
3d7a638b20
13 changed files with 54 additions and 32 deletions
|
@ -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."}
|
||||||
|
/>
|
||||||
|
));
|
||||||
|
|
|
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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==",
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue