fix: delete issue mutation & toast (#3079)

* fix: delete issue mutation

* fix: toast on delete issue

* fix: activity to issue detail redirection
This commit is contained in:
Lakhan Baheti 2023-12-11 22:24:41 +05:30 committed by GitHub
parent 472a5d8047
commit ae2e1a4b64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 37 additions and 24 deletions

View File

@ -3,6 +3,8 @@ import { Dialog, Transition } from "@headlessui/react";
import { AlertTriangle } from "lucide-react"; import { AlertTriangle } from "lucide-react";
// ui // ui
import { Button } from "@plane/ui"; import { Button } from "@plane/ui";
// hooks
import useToast from "hooks/use-toast";
// types // types
import type { IIssue } from "types"; import type { IIssue } from "types";
@ -18,6 +20,8 @@ export const DeleteIssueModal: React.FC<Props> = (props) => {
const [isDeleteLoading, setIsDeleteLoading] = useState(false); const [isDeleteLoading, setIsDeleteLoading] = useState(false);
const { setToastAlert } = useToast();
useEffect(() => { useEffect(() => {
setIsDeleteLoading(false); setIsDeleteLoading(false);
}, [isOpen]); }, [isOpen]);
@ -31,7 +35,21 @@ export const DeleteIssueModal: React.FC<Props> = (props) => {
setIsDeleteLoading(true); setIsDeleteLoading(true);
if (onSubmit) if (onSubmit)
await onSubmit() await onSubmit()
.then(() => onClose()) .then(() => {
setToastAlert({
title: "Success",
type: "success",
message: "Issue deleted successfully",
});
onClose();
})
.catch(() => {
setToastAlert({
title: "Error",
type: "error",
message: "Failed to delete issue",
});
})
.finally(() => setIsDeleteLoading(false)); .finally(() => setIsDeleteLoading(false));
}; };

View File

@ -195,25 +195,12 @@ export const BaseKanBanRoot: React.FC<IBaseKanBanLayout> = observer((props: IBas
const handleDeleteIssue = async () => { const handleDeleteIssue = async () => {
if (!handleDragDrop) return; if (!handleDragDrop) return;
await handleDragDrop(dragState.source, dragState.destination, sub_group_by, group_by, issues, issueIds) await handleDragDrop(dragState.source, dragState.destination, sub_group_by, group_by, issues, issueIds).finally(
.then(() => { () => {
setToastAlert({
title: "Success",
type: "success",
message: "Issue deleted successfully",
});
})
.catch(() => {
setToastAlert({
title: "Error",
type: "error",
message: "Failed to delete issue",
});
})
.finally(() => {
setDeleteIssueModal(false); setDeleteIssueModal(false);
setDragState({}); setDragState({});
}); }
);
}; };
const handleKanBanToggle = (toggle: "groupByHeaderMinMax" | "subgroupByIssuesVisibility", value: string) => { const handleKanBanToggle = (toggle: "groupByHeaderMinMax" | "subgroupByIssuesVisibility", value: string) => {

View File

@ -77,6 +77,13 @@ export const SpreadsheetView: React.FC<Props> = observer((props) => {
}; };
}, []); }, []);
if (!issues || issues.length === 0)
return (
<div className="grid h-full w-full place-items-center">
<Spinner />
</div>
);
return ( return (
<div className="relative flex h-full w-full overflow-x-auto whitespace-nowrap rounded-lg bg-custom-background-200 text-custom-text-200"> <div className="relative flex h-full w-full overflow-x-auto whitespace-nowrap rounded-lg bg-custom-background-200 text-custom-text-200">
<div className="flex h-full w-full flex-col"> <div className="flex h-full w-full flex-col">
@ -84,7 +91,7 @@ export const SpreadsheetView: React.FC<Props> = observer((props) => {
ref={containerRef} ref={containerRef}
className="horizontal-scroll-enable flex divide-x-[0.5px] divide-custom-border-200 overflow-y-auto" className="horizontal-scroll-enable flex divide-x-[0.5px] divide-custom-border-200 overflow-y-auto"
> >
{issues && issues.length > 0 ? ( {issues && issues.length > 0 && (
<> <>
<div className="sticky left-0 z-[2] w-[28rem]"> <div className="sticky left-0 z-[2] w-[28rem]">
<div <div
@ -134,10 +141,6 @@ export const SpreadsheetView: React.FC<Props> = observer((props) => {
states={states} states={states}
/> />
</> </>
) : (
<div className="grid h-full w-full place-items-center">
<Spinner />
</div>
)} )}
<div /> {/* empty div to show right most border */} <div /> {/* empty div to show right most border */}
</div> </div>

View File

@ -100,7 +100,9 @@ const ProfileActivityPage: NextPageWithLayout = () => {
activityItem.field !== "estimate" ? ( activityItem.field !== "estimate" ? (
<span className="text-custom-text-200"> <span className="text-custom-text-200">
created{" "} created{" "}
<Link href={`/${workspaceSlug}/projects/${activityItem.project}/issues/${activityItem.issue}`}> <Link
href={`/${activityItem.workspace_detail.slug}/projects/${activityItem.project}/issues/${activityItem.issue}`}
>
<span className="inline-flex items-center hover:underline"> <span className="inline-flex items-center hover:underline">
this issue. <ExternalLinkIcon className="ml-1 h-3.5 w-3.5" /> this issue. <ExternalLinkIcon className="ml-1 h-3.5 w-3.5" />
</span> </span>

View File

@ -257,6 +257,7 @@ export class CycleIssuesStore extends IssueBaseStore implements ICycleIssuesStor
if (!_issues) _issues = {}; if (!_issues) _issues = {};
if (!_issues[cycleId]) _issues[cycleId] = {}; if (!_issues[cycleId]) _issues[cycleId] = {};
delete _issues?.[cycleId]?.[issueId]; delete _issues?.[cycleId]?.[issueId];
_issues[cycleId] = { ..._issues[cycleId] };
runInAction(() => { runInAction(() => {
this.issues = _issues; this.issues = _issues;

View File

@ -250,6 +250,7 @@ export class ModuleIssuesStore extends IssueBaseStore implements IModuleIssuesSt
if (!_issues) _issues = {}; if (!_issues) _issues = {};
if (!_issues[moduleId]) _issues[moduleId] = {}; if (!_issues[moduleId]) _issues[moduleId] = {};
delete _issues?.[moduleId]?.[issueId]; delete _issues?.[moduleId]?.[issueId];
_issues[moduleId] = { ..._issues[moduleId] };
runInAction(() => { runInAction(() => {
this.issues = _issues; this.issues = _issues;

View File

@ -175,6 +175,7 @@ export class ProjectIssuesStore extends IssueBaseStore implements IProjectIssues
if (!_issues) _issues = {}; if (!_issues) _issues = {};
if (!_issues[projectId]) _issues[projectId] = {}; if (!_issues[projectId]) _issues[projectId] = {};
delete _issues?.[projectId]?.[issueId]; delete _issues?.[projectId]?.[issueId];
_issues[projectId] = { ..._issues[projectId] };
runInAction(() => { runInAction(() => {
this.issues = _issues; this.issues = _issues;