[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:
parent
002b2505f3
commit
ec43c8e634
9 changed files with 37 additions and 1178 deletions
|
|
@ -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"}`}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue