regression: wiki upgrade screen #4831
This commit is contained in:
@@ -1,118 +0,0 @@
|
||||
"use client";
|
||||
|
||||
import React from "react";
|
||||
import { observer } from "mobx-react";
|
||||
import { useParams } from "next/navigation";
|
||||
// plane imports
|
||||
import { E_FEATURE_FLAGS, WIKI_TRACKER_ELEMENTS, WIKI_TRACKER_EVENTS } from "@plane/constants";
|
||||
import { useTranslation } from "@plane/i18n";
|
||||
import { WikiIcon } from "@plane/propel/icons";
|
||||
import { setPromiseToast } from "@plane/propel/toast";
|
||||
import { EUserWorkspaceRoles } from "@plane/types";
|
||||
import { ToggleSwitch } from "@plane/ui";
|
||||
// component
|
||||
import { NotAuthorizedView } from "@/components/auth-screens/not-authorized-view";
|
||||
import { PageHead } from "@/components/core/page-title";
|
||||
import { SettingsContentWrapper } from "@/components/settings/content-wrapper";
|
||||
import { SettingsHeading } from "@/components/settings/heading";
|
||||
// store hooks
|
||||
import { captureClick, captureError, captureSuccess } from "@/helpers/event-tracker.helper";
|
||||
import { useWorkspace } from "@/hooks/store/use-workspace";
|
||||
import { useUserPermissions } from "@/hooks/store/user";
|
||||
// plane web imports
|
||||
import { WithFeatureFlagHOC } from "@/plane-web/components/feature-flags";
|
||||
import { WikiSettingsUpgradeScreen } from "@/plane-web/components/wiki/settings-upgrade-screen";
|
||||
import { useWorkspaceFeatures } from "@/plane-web/hooks/store";
|
||||
import { EWorkspaceFeatures } from "@/plane-web/types/workspace-feature";
|
||||
|
||||
const WikiSettingsPage = observer(() => {
|
||||
// router
|
||||
const { workspaceSlug } = useParams();
|
||||
// store hooks
|
||||
const { getWorkspaceRoleByWorkspaceSlug } = useUserPermissions();
|
||||
const { currentWorkspace } = useWorkspace();
|
||||
const { isWorkspaceFeatureEnabled, updateWorkspaceFeature } = useWorkspaceFeatures();
|
||||
const { t } = useTranslation();
|
||||
|
||||
// derived values
|
||||
const currentWorkspaceRole = getWorkspaceRoleByWorkspaceSlug(workspaceSlug.toString());
|
||||
const pageTitle = currentWorkspace?.name ? `${currentWorkspace.name} - Wiki` : undefined;
|
||||
const isAdmin = currentWorkspaceRole === EUserWorkspaceRoles.ADMIN;
|
||||
const isWikiFeatureEnabled = isWorkspaceFeatureEnabled(EWorkspaceFeatures.IS_WIKI_ENABLED);
|
||||
|
||||
if (!workspaceSlug || !currentWorkspace?.id) return <></>;
|
||||
|
||||
if (!isAdmin) return <NotAuthorizedView section="settings" className="h-auto" />;
|
||||
|
||||
const toggleWikiFeature = async () => {
|
||||
try {
|
||||
captureClick({
|
||||
elementName: WIKI_TRACKER_ELEMENTS.SETTINGS_PAGE_TOGGLE_BUTTON,
|
||||
});
|
||||
const payload = {
|
||||
[EWorkspaceFeatures.IS_WIKI_ENABLED]: !isWikiFeatureEnabled,
|
||||
};
|
||||
const toggleWikiFeaturePromise = updateWorkspaceFeature(workspaceSlug.toString(), payload);
|
||||
setPromiseToast(toggleWikiFeaturePromise, {
|
||||
loading: "Updating Wiki feature...",
|
||||
success: {
|
||||
title: "Success",
|
||||
message: () => `Wiki feature ${isWikiFeatureEnabled ? "disabled" : "enabled"} successfully!`,
|
||||
},
|
||||
error: {
|
||||
title: "Error",
|
||||
message: () => "Failed to update Wiki feature!",
|
||||
},
|
||||
});
|
||||
await toggleWikiFeaturePromise;
|
||||
captureSuccess({
|
||||
eventName: WIKI_TRACKER_EVENTS.TOGGLE,
|
||||
payload: {
|
||||
workspace_slug: workspaceSlug.toString(),
|
||||
type: isWikiFeatureEnabled ? "disable" : "enable",
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
captureError({
|
||||
eventName: WIKI_TRACKER_EVENTS.TOGGLE,
|
||||
payload: {
|
||||
workspace_slug: workspaceSlug.toString(),
|
||||
type: isWikiFeatureEnabled ? "disable" : "enable",
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<SettingsContentWrapper>
|
||||
<PageHead title={pageTitle} />
|
||||
<SettingsHeading title="Wiki" description={t("workspace_settings.settings.wiki.description")} />
|
||||
<WithFeatureFlagHOC
|
||||
flag={E_FEATURE_FLAGS.WORKSPACE_PAGES}
|
||||
fallback={<WikiSettingsUpgradeScreen workspaceSlug={workspaceSlug?.toString()} />}
|
||||
workspaceSlug={workspaceSlug?.toString()}
|
||||
>
|
||||
<div className="px-4 py-6 flex items-center justify-between gap-2 border-b border-custom-border-100 w-full">
|
||||
<div className="flex items-center gap-4">
|
||||
<div className="size-10 bg-custom-background-90 rounded-md flex items-center justify-center">
|
||||
<WikiIcon className="size-5 text-custom-text-300" />
|
||||
</div>
|
||||
<div className="leading-tight">
|
||||
<h5 className="font-medium">Turn on Wiki for this workspace.</h5>
|
||||
<span className="text-custom-sidebar-text-400 text-sm">
|
||||
Your new smart teammate, ready when you are.{" "}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<ToggleSwitch value={isWikiFeatureEnabled} onChange={toggleWikiFeature} size="sm" />
|
||||
</div>
|
||||
</div>
|
||||
</WithFeatureFlagHOC>
|
||||
</SettingsContentWrapper>
|
||||
);
|
||||
});
|
||||
|
||||
export default WikiSettingsPage;
|
||||
@@ -1,7 +1,7 @@
|
||||
"use client";
|
||||
|
||||
// layouts
|
||||
import { Outlet } from "react-router";
|
||||
import useSWR from "swr";
|
||||
// components
|
||||
import { EUserPermissions } from "@plane/constants";
|
||||
// wrappers
|
||||
@@ -10,6 +10,7 @@ import WorkspaceAccessWrapper from "@/layouts/access/workspace-wrapper";
|
||||
import { WikiAppPowerKProvider } from "@/plane-web/components/command-palette/wiki/provider";
|
||||
import { WithFeatureFlagHOC } from "@/plane-web/components/feature-flags/with-feature-flag-hoc";
|
||||
import { WikiUpgradeScreen } from "@/plane-web/components/wiki/upgrade-screen";
|
||||
import { EPageStoreType, usePageStore } from "@/plane-web/hooks/store";
|
||||
// local components
|
||||
import type { Route } from "./+types/layout";
|
||||
import { PagesAppSidebar } from "./_sidebar";
|
||||
@@ -17,6 +18,13 @@ import { PagesAppSidebar } from "./_sidebar";
|
||||
export default function WikiLayout({ params }: Route.ComponentProps) {
|
||||
// router
|
||||
const { workspaceSlug } = params;
|
||||
// store hooks
|
||||
const { fetchPagesSummary } = usePageStore(EPageStoreType.WORKSPACE);
|
||||
// fetch wiki summary
|
||||
useSWR(workspaceSlug ? `WORKSPACE_PAGES_SUMMARY_${workspaceSlug}` : null, workspaceSlug ? fetchPagesSummary : null, {
|
||||
revalidateOnFocus: false,
|
||||
revalidateIfStale: false,
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -11,7 +11,6 @@ export const renderAdditionalValue = (
|
||||
newValue: string | undefined,
|
||||
oldValue: string | undefined
|
||||
) => {
|
||||
console.log("notificationField", { notificationField, newValue, oldValue });
|
||||
if (notificationField === "page") return getPageName(newValue || oldValue || "");
|
||||
return newValue;
|
||||
};
|
||||
|
||||
@@ -51,6 +51,7 @@ export interface IWorkspacePageStore {
|
||||
findRootParent: (page: TWorkspacePage) => TWorkspacePage | undefined;
|
||||
clearRootParentCache: () => void;
|
||||
// actions
|
||||
fetchPagesSummary: () => Promise<TPagesSummary | undefined>;
|
||||
fetchAllPages: () => Promise<TPage[] | undefined>;
|
||||
fetchPagesByType: (pageType: string, searchQuery?: string) => Promise<TPage[] | undefined>;
|
||||
fetchParentPages: (pageId: string) => Promise<TPage[] | undefined>;
|
||||
@@ -140,6 +141,7 @@ export class WorkspacePageStore implements IWorkspacePageStore {
|
||||
updateFilters: action,
|
||||
clearAllFilters: action,
|
||||
// actions
|
||||
fetchPagesSummary: action,
|
||||
fetchAllPages: action,
|
||||
fetchPagesByType: action,
|
||||
fetchParentPages: action,
|
||||
@@ -523,6 +525,23 @@ export class WorkspacePageStore implements IWorkspacePageStore {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @description fetch all the pages
|
||||
*/
|
||||
fetchPagesSummary = async () => {
|
||||
const { workspaceSlug } = this.store.router;
|
||||
if (!workspaceSlug) return undefined;
|
||||
try {
|
||||
const pagesSummary = await this.pageService.fetchPagesSummary(workspaceSlug);
|
||||
runInAction(() => {
|
||||
this.pagesSummary = pagesSummary;
|
||||
});
|
||||
return pagesSummary;
|
||||
} catch (error) {
|
||||
console.error("Unable to fetch pages summary", error);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @description fetch all the pages
|
||||
*/
|
||||
@@ -537,12 +556,8 @@ export class WorkspacePageStore implements IWorkspacePageStore {
|
||||
this.error = undefined;
|
||||
});
|
||||
|
||||
const pagesSummary = await this.pageService.fetchPagesSummary(workspaceSlug);
|
||||
|
||||
const pages = await this.pageService.fetchAll(workspaceSlug);
|
||||
runInAction(() => {
|
||||
this.pagesSummary = pagesSummary;
|
||||
|
||||
for (const page of pages)
|
||||
if (page?.id) {
|
||||
const pageInstance = this.getPageById(page.id);
|
||||
@@ -868,12 +883,8 @@ export class WorkspacePageStore implements IWorkspacePageStore {
|
||||
this.error = undefined;
|
||||
});
|
||||
|
||||
const pagesSummary = await this.pageService.fetchPagesSummary(workspaceSlug);
|
||||
|
||||
const pages = await this.pageService.fetchPagesByType(workspaceSlug, pageType, searchQuery);
|
||||
runInAction(() => {
|
||||
this.pagesSummary = pagesSummary;
|
||||
|
||||
for (const page of pages) {
|
||||
if (page?.id) {
|
||||
const pageInstance = this.getPageById(page.id);
|
||||
|
||||
Reference in New Issue
Block a user