From cd667810d3eddd2d2c405d3cbc849aeae3c7c534 Mon Sep 17 00:00:00 2001
From: "M. Palanikannan" <73993394+Palanikannan1437@users.noreply.github.com>
Date: Thu, 26 Jun 2025 13:16:10 +0530
Subject: [PATCH] [WIKI-494] Fix: feature flag for shared pages in sidebar
(#3509)
* fix: shared pages feature flag
* fix: empty state
---
.../(pageType)/shared/empty-shared-pages.tsx | 68 +++++++++++++++++++
.../(pages)/pages/(pageType)/shared/page.tsx | 16 ++++-
.../pages/sidebar/section/section-root.tsx | 9 +++
3 files changed, 92 insertions(+), 1 deletion(-)
create mode 100644 web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/empty-shared-pages.tsx
diff --git a/web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/empty-shared-pages.tsx b/web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/empty-shared-pages.tsx
new file mode 100644
index 0000000000..b0b7c7d598
--- /dev/null
+++ b/web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/empty-shared-pages.tsx
@@ -0,0 +1,68 @@
+"use client";
+
+import { observer } from "mobx-react";
+import { Users, Crown } from "lucide-react";
+// plane imports
+import { EUserWorkspaceRoles, EUserPermissionsLevel } from "@plane/constants";
+import { Button, getButtonStyling } from "@plane/ui";
+import { cn } from "@plane/utils";
+// hooks
+import { useUserPermissions } from "@/hooks/store";
+// assets
+import { useWorkspaceSubscription } from "@/plane-web/hooks/store";
+
+export const SharedPagesFallback = observer(() => {
+ // store hooks
+ const { allowPermissions } = useUserPermissions();
+ const { togglePaidPlanModal } = useWorkspaceSubscription();
+
+ // derived values
+ const canUpgrade = allowPermissions([EUserWorkspaceRoles.ADMIN], EUserPermissionsLevel.WORKSPACE);
+
+ return (
+
+
+
+
+
+
+
+
Upgrade for Page Sharing
+
+ Collaborate seamlessly by sharing pages with your team members. Grant different access levels and work
+ together on your documentation and knowledge base.
+
+
+
+
+ Share pages with your team
+
+
+ Control access levels (view, edit)
+
+
+
+ {canUpgrade && (
+
+ )}
+
+
+
+ );
+});
diff --git a/web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/page.tsx b/web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/page.tsx
index 8e368fbcd0..e947807ec2 100644
--- a/web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/page.tsx
+++ b/web/app/(all)/[workspaceSlug]/(pages)/pages/(pageType)/shared/page.tsx
@@ -1,8 +1,22 @@
"use client";
+import { useParams } from "next/navigation";
// plane web components
+import { WithFeatureFlagHOC } from "@/plane-web/components/feature-flags";
import { WikiPagesListLayoutRoot } from "@/plane-web/components/pages";
+// local components
+import { SharedPagesFallback } from "./empty-shared-pages";
export default function SharedPagesList() {
- return ;
+ const { workspaceSlug } = useParams();
+
+ return (
+ }
+ >
+
+
+ );
}
diff --git a/web/ee/components/pages/sidebar/section/section-root.tsx b/web/ee/components/pages/sidebar/section/section-root.tsx
index fb7238677d..38bebd4fec 100644
--- a/web/ee/components/pages/sidebar/section/section-root.tsx
+++ b/web/ee/components/pages/sidebar/section/section-root.tsx
@@ -15,6 +15,7 @@ import { useAppTheme } from "@/hooks/store";
import { useAppRouter } from "@/hooks/use-app-router";
// plane web hooks
import { EPageStoreType, usePageStore } from "@/plane-web/hooks/store";
+import { useFlag } from "@/plane-web/hooks/store/use-flag";
// local imports
import { SectionHeader, SectionContent } from "./components";
import { SECTION_DETAILS } from "./constants";
@@ -44,6 +45,14 @@ const WikiSidebarListSectionRootContent: React.FC = observer((
EPageStoreType.WORKSPACE
);
+ // feature flag check for shared pages
+ const isSharedPagesEnabled = useFlag(workspaceSlug?.toString(), "SHARED_PAGES", false);
+
+ // Don't render shared section if feature flag is disabled
+ if (sectionType === "shared" && !isSharedPagesEnabled) {
+ return null;
+ }
+
// Custom hooks
const { isDropping } = useSectionDragAndDrop(listSectionRef, getPageById, sectionType);
const { isLoading } = useSectionPages(sectionType);