[WEB-584] fix: draft issue management with workspace specific local storage (#3822)

* fix: draft issue local storage state manahement in workspace level

* chore: removed consoles
This commit is contained in:
guru_sainath 2024-02-28 15:29:40 +05:30 committed by GitHub
parent 002b2505f3
commit ec43c8e634
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 37 additions and 1178 deletions

View file

@ -5,23 +5,29 @@ import { ChevronUp, PenSquare, Search } from "lucide-react";
import { useApplication, useEventTracker, useProject, useUser } from "hooks/store";
import useLocalStorage from "hooks/use-local-storage";
// components
import { CreateUpdateDraftIssueModal } from "components/issues";
import { CreateUpdateIssueModal } from "components/issues";
// constants
import { EUserWorkspaceRoles } from "constants/workspace";
import { EIssuesStoreType } from "constants/issue";
// types
import { TIssue } from "@plane/types";
export const WorkspaceSidebarQuickAction = observer(() => {
// states
const [isDraftIssueModalOpen, setIsDraftIssueModalOpen] = useState(false);
const { theme: themeStore, commandPalette: commandPaletteStore } = useApplication();
const {
router: { workspaceSlug },
theme: themeStore,
commandPalette: commandPaletteStore,
} = useApplication();
const { setTrackElement } = useEventTracker();
const { joinedProjectIds } = useProject();
const {
membership: { currentWorkspaceRole },
} = useUser();
const { storedValue, clearValue } = useLocalStorage<any>("draftedIssue", JSON.stringify({}));
const { storedValue, setValue } = useLocalStorage<Record<string, Partial<TIssue>>>("draftedIssue", {});
//useState control for displaying draft issue button instead of group hover
const [isDraftButtonOpen, setIsDraftButtonOpen] = useState(false);
@ -45,18 +51,25 @@ export const WorkspaceSidebarQuickAction = observer(() => {
setIsDraftButtonOpen(false);
}, 300);
};
const workspaceDraftIssue = workspaceSlug ? storedValue?.[workspaceSlug] ?? undefined : undefined;
const removeWorkspaceDraftIssue = () => {
const draftIssues = storedValue ?? {};
if (workspaceSlug && draftIssues[workspaceSlug]) delete draftIssues[workspaceSlug];
setValue(draftIssues);
};
return (
<>
<CreateUpdateDraftIssueModal
<CreateUpdateIssueModal
isOpen={isDraftIssueModalOpen}
handleClose={() => setIsDraftIssueModalOpen(false)}
prePopulateData={storedValue ? JSON.parse(storedValue) : {}}
onSubmit={() => {
localStorage.removeItem("draftedIssue");
clearValue();
}}
fieldsToShow={["all"]}
onClose={() => setIsDraftIssueModalOpen(false)}
data={workspaceDraftIssue ?? {}}
// storeType={storeType}
isDraft={true}
/>
<div
className={`mt-4 flex w-full cursor-pointer items-center justify-between px-4 ${
isSidebarCollapsed ? "flex-col gap-1" : "gap-2"
@ -87,7 +100,7 @@ export const WorkspaceSidebarQuickAction = observer(() => {
{!isSidebarCollapsed && <span className="text-sm font-medium">New Issue</span>}
</button>
{!disabled && storedValue && Object.keys(JSON.parse(storedValue)).length > 0 && (
{!disabled && workspaceDraftIssue && (
<>
<div
className={`h-8 w-0.5 bg-custom-sidebar-background-80 ${isSidebarCollapsed ? "hidden" : "block"}`}