Route saving
This commit is contained in:
+10
-14
@@ -14,9 +14,6 @@ import {
|
|||||||
} from "@/lib/workspace";
|
} from "@/lib/workspace";
|
||||||
|
|
||||||
export default function Workspace() {
|
export default function Workspace() {
|
||||||
const [currentWorkspace, setCurrentWorkspace] = useState<string>();
|
|
||||||
const [isInitialized, setIsInitialized] = useState(false);
|
|
||||||
|
|
||||||
const { workspace, loadWorkspace, updateEntity, setWorkspace } =
|
const { workspace, loadWorkspace, updateEntity, setWorkspace } =
|
||||||
useWorkspace();
|
useWorkspace();
|
||||||
|
|
||||||
@@ -26,9 +23,10 @@ export default function Workspace() {
|
|||||||
* Initialize workspace from cookie on mount
|
* Initialize workspace from cookie on mount
|
||||||
*/
|
*/
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const workspaceId = Cookies.get("workspace");
|
const routeString = Cookies.get("route");
|
||||||
setCurrentWorkspace(workspaceId);
|
if (!routeString) return;
|
||||||
setIsInitialized(true);
|
const route = JSON.parse(routeString) as Route;
|
||||||
|
setRoute(route);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,16 +39,14 @@ export default function Workspace() {
|
|||||||
* for this case.
|
* for this case.
|
||||||
*/
|
*/
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isInitialized) return;
|
loadWorkspace(route.workspace);
|
||||||
|
if (route.workspace) {
|
||||||
loadWorkspace(currentWorkspace);
|
Cookies.set("route", JSON.stringify(route));
|
||||||
if (currentWorkspace) {
|
|
||||||
Cookies.set("workspace", currentWorkspace);
|
|
||||||
} else {
|
} else {
|
||||||
Cookies.remove("workspace");
|
Cookies.remove("route");
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [currentWorkspace, isInitialized]);
|
}, [route]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load route (entity) from localStorage when workspace loads
|
* Load route (entity) from localStorage when workspace loads
|
||||||
@@ -103,7 +99,7 @@ export default function Workspace() {
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
const w = createDefaultWorkspace();
|
const w = createDefaultWorkspace();
|
||||||
saveWorkspaceToLocalStorage(w);
|
saveWorkspaceToLocalStorage(w);
|
||||||
setCurrentWorkspace(w.id);
|
setRoute({ workspace: w.id });
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="text-center space-y-6">
|
<div className="text-center space-y-6">
|
||||||
|
|||||||
@@ -92,34 +92,36 @@ export default function TaskView({
|
|||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div className="px-6 pt-4 flex flex-col gap-4">
|
<div className="px-6 pt-4 flex flex-col gap-4">
|
||||||
<div className="flex items-center justify-end">
|
<div className="flex items-center justify-end"></div>
|
||||||
<DropdownMenu>
|
|
||||||
<DropdownMenuTrigger asChild>
|
|
||||||
<Button variant="outline" size="sm" disabled={isExporting}>
|
|
||||||
<FileDown className="h-4 w-4 mr-2" />
|
|
||||||
Export
|
|
||||||
</Button>
|
|
||||||
</DropdownMenuTrigger>
|
|
||||||
<DropdownMenuContent align="end">
|
|
||||||
<DropdownMenuItem onClick={() => handleExport("csv")}>
|
|
||||||
Export as CSV
|
|
||||||
</DropdownMenuItem>
|
|
||||||
<DropdownMenuItem onClick={() => handleExport("markdown")}>
|
|
||||||
Export as Markdown
|
|
||||||
</DropdownMenuItem>
|
|
||||||
<DropdownMenuSeparator />
|
|
||||||
<DropdownMenuItem onClick={() => handleExport("json")}>
|
|
||||||
Export as JSON
|
|
||||||
</DropdownMenuItem>
|
|
||||||
</DropdownMenuContent>
|
|
||||||
</DropdownMenu>
|
|
||||||
</div>
|
|
||||||
<Tabs defaultValue="board" className="w-full">
|
<Tabs defaultValue="board" className="w-full">
|
||||||
<TabsList className="mb-4">
|
<div className="flex justify-between">
|
||||||
<TabsTrigger value="board">Board</TabsTrigger>
|
<TabsList className="mb-4">
|
||||||
<TabsTrigger value="table">Table</TabsTrigger>
|
<TabsTrigger value="board">Board</TabsTrigger>
|
||||||
<TabsTrigger value="edit">Edit</TabsTrigger>
|
<TabsTrigger value="table">Table</TabsTrigger>
|
||||||
</TabsList>
|
<TabsTrigger value="edit">Edit</TabsTrigger>
|
||||||
|
</TabsList>
|
||||||
|
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger asChild>
|
||||||
|
<Button variant="outline" size="sm" disabled={isExporting}>
|
||||||
|
<FileDown className="h-4 w-4 mr-2" />
|
||||||
|
Export
|
||||||
|
</Button>
|
||||||
|
</DropdownMenuTrigger>
|
||||||
|
<DropdownMenuContent align="end">
|
||||||
|
<DropdownMenuItem onClick={() => handleExport("csv")}>
|
||||||
|
Export as CSV
|
||||||
|
</DropdownMenuItem>
|
||||||
|
<DropdownMenuItem onClick={() => handleExport("markdown")}>
|
||||||
|
Export as Markdown
|
||||||
|
</DropdownMenuItem>
|
||||||
|
<DropdownMenuSeparator />
|
||||||
|
<DropdownMenuItem onClick={() => handleExport("json")}>
|
||||||
|
Export as JSON
|
||||||
|
</DropdownMenuItem>
|
||||||
|
</DropdownMenuContent>
|
||||||
|
</DropdownMenu>
|
||||||
|
</div>
|
||||||
|
|
||||||
<TabsContent value="board" className="mt-0">
|
<TabsContent value="board" className="mt-0">
|
||||||
<BoardView
|
<BoardView
|
||||||
|
|||||||
Reference in New Issue
Block a user