From d9d62c2d5af59140860edc69db61762162adc098 Mon Sep 17 00:00:00 2001
From: rahulramesha <71900764+rahulramesha@users.noreply.github.com>
Date: Tue, 2 Jul 2024 16:21:28 +0530
Subject: [PATCH] Add empty state when view is not available (#5002)
---
.../workspace-views/[globalViewId]/page.tsx | 2 +-
.../roots/all-issue-layout-root.tsx | 32 +++++++++++++++++--
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/web/app/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx b/web/app/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx
index 554e82b10..95fb113cd 100644
--- a/web/app/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx
+++ b/web/app/[workspaceSlug]/(projects)/workspace-views/[globalViewId]/page.tsx
@@ -34,7 +34,7 @@ const GlobalViewIssuesPage = observer(() => {
>
diff --git a/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx b/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx
index d51f61460..6f1c5156b 100644
--- a/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx
+++ b/web/core/components/issues/issue-layouts/roots/all-issue-layout-root.tsx
@@ -6,6 +6,7 @@ import useSWR from "swr";
import { IIssueDisplayFilterOptions } from "@plane/types";
// hooks
// components
+import { EmptyState } from "@/components/common";
import { SpreadsheetView } from "@/components/issues/issue-layouts";
import { AllIssueQuickActions } from "@/components/issues/issue-layouts/quick-action-dropdowns";
import { SpreadsheetLayoutLoader } from "@/components/ui";
@@ -20,17 +21,25 @@ import {
import { EUserProjectRoles } from "@/constants/project";
// hooks
import { useGlobalView, useIssues, useUser } from "@/hooks/store";
+import { useAppRouter } from "@/hooks/use-app-router";
import { IssuesStoreContext } from "@/hooks/use-issue-layout-store";
import { useIssuesActions } from "@/hooks/use-issues-actions";
import { useWorkspaceIssueProperties } from "@/hooks/use-workspace-issue-properties";
// store
+import emptyView from "@/public/empty-state/view.svg";
import { IssuePeekOverview } from "../../peek-overview";
import { IssueLayoutHOC } from "../issue-layout-HOC";
import { TRenderQuickActions } from "../list/list-view-types";
-export const AllIssueLayoutRoot: React.FC = observer(() => {
+type Props = {
+ isDefaultView: boolean;
+};
+
+export const AllIssueLayoutRoot: React.FC = observer((props: Props) => {
+ const { isDefaultView } = props;
// router
const { workspaceSlug, globalViewId } = useParams();
+ const router = useAppRouter();
const searchParams = useSearchParams();
const routeFilters: {
[key: string]: string;
@@ -50,7 +59,9 @@ export const AllIssueLayoutRoot: React.FC = observer(() => {
const {
membership: { currentWorkspaceAllProjectsRole },
} = useUser();
- const { fetchAllGlobalViews } = useGlobalView();
+ const { fetchAllGlobalViews, getViewDetailsById } = useGlobalView();
+
+ const viewDetails = getViewDetailsById(globalViewId?.toString());
// filter init from the query params
const routerFilterParams = () => {
@@ -86,7 +97,7 @@ export const AllIssueLayoutRoot: React.FC = observer(() => {
if (workspaceSlug && globalViewId) fetchNextIssues(workspaceSlug.toString(), globalViewId.toString());
}, [fetchNextIssues, workspaceSlug, globalViewId]);
- useSWR(
+ const { isLoading } = useSWR(
workspaceSlug ? `WORKSPACE_GLOBAL_VIEWS_${workspaceSlug}` : null,
async () => {
if (workspaceSlug) {
@@ -162,6 +173,21 @@ export const AllIssueLayoutRoot: React.FC = observer(() => {
[canEditProperties, removeIssue, updateIssue, archiveIssue]
);
+ // when the call is not loading and the view does not exist and the view is not a default view, show empty state
+ if (!isLoading && !viewDetails && !isDefaultView) {
+ return (
+ router.push(`/${workspaceSlug}/workspace-views/all-issues`),
+ }}
+ />
+ );
+ }
+
if (getIssueLoader() === "init-loader" || !globalViewId || !groupedIssueIds) {
return ;
}