chore: decline issue mutation (#1354)

This commit is contained in:
Aaryan Khandelwal 2023-06-21 17:56:08 +05:30 committed by GitHub
parent a0ae569a68
commit 2cef6e67d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 74 deletions

View File

@ -1,102 +1,33 @@
import React, { useEffect, useState } from "react";
import { useRouter } from "next/router";
import { mutate } from "swr";
import React, { useState } from "react";
// headless ui
import { Dialog, Transition } from "@headlessui/react";
// services
import inboxServices from "services/inbox.service";
// hooks
import useToast from "hooks/use-toast";
import useInboxView from "hooks/use-inbox-view";
import useUser from "hooks/use-user";
// icons
import { ExclamationTriangleIcon } from "@heroicons/react/24/outline";
// ui
import { SecondaryButton, DangerButton } from "components/ui";
// types
import type { IInboxIssue, ICurrentUserResponse, IInboxIssueDetail } from "types";
// fetch-keys
import { INBOX_ISSUES, INBOX_ISSUE_DETAILS } from "constants/fetch-keys";
import type { IInboxIssue } from "types";
type Props = {
isOpen: boolean;
handleClose: () => void;
data: IInboxIssue | undefined;
onSubmit: () => Promise<void>;
};
export const DeclineIssueModal: React.FC<Props> = ({ isOpen, handleClose, data }) => {
export const DeclineIssueModal: React.FC<Props> = ({ isOpen, handleClose, data, onSubmit }) => {
const [isDeclining, setIsDeclining] = useState(false);
const router = useRouter();
const { workspaceSlug, projectId, inboxId } = router.query;
const { user } = useUser();
const { setToastAlert } = useToast();
const { params } = useInboxView();
const onClose = () => {
setIsDeclining(false);
handleClose();
};
const handleDecline = () => {
if (!workspaceSlug || !projectId || !inboxId || !data) return;
setIsDeclining(true);
inboxServices
.markInboxStatus(
workspaceSlug.toString(),
projectId.toString(),
inboxId.toString(),
data.bridge_id,
{
status: -1,
},
user
)
.then(() => {
mutate<IInboxIssueDetail>(
INBOX_ISSUE_DETAILS(inboxId.toString(), data.bridge_id),
(prevData) => {
if (!prevData) return prevData;
return {
...prevData,
issue_inbox: [{ ...prevData.issue_inbox[0], status: -1 }],
};
},
false
);
mutate<IInboxIssue[]>(
INBOX_ISSUES(inboxId.toString(), params),
(prevData) =>
prevData?.map((i) =>
i.bridge_id === data.bridge_id
? { ...i, issue_inbox: [{ ...i.issue_inbox[0], status: -1 }] }
: i
),
false
);
setToastAlert({
type: "success",
title: "Success!",
message: "Issue declined successfully.",
});
onClose();
})
.catch(() =>
setToastAlert({
type: "error",
title: "Error!",
message: "Issue could not be declined. Please try again.",
})
)
.finally(() => setIsDeclining(false));
onSubmit().finally(() => setIsDeclining(false));
};
return (

View File

@ -194,6 +194,11 @@ const ProjectInbox: NextPage = () => {
isOpen={declineIssueModal}
handleClose={() => setDeclineIssueModal(false)}
data={inboxIssues?.find((i) => i.bridge_id === inboxIssueId)}
onSubmit={async () => {
await markInboxStatus({
status: -1,
}).finally(() => setDeclineIssueModal(false));
}}
/>
<DeleteIssueModal
isOpen={deleteIssueModal}