Compare commits

...

1 Commits

Author SHA1 Message Date
Aaryan Khandelwal
83298a7a69 chore: generalize page root component 2024-12-18 15:19:48 +05:30

View File

@@ -4,7 +4,7 @@ import { useSearchParams } from "next/navigation";
// editor // editor
import { EditorRefApi } from "@plane/editor"; import { EditorRefApi } from "@plane/editor";
// types // types
import { TPage } from "@plane/types"; import { TDocumentPayload, TPage, TPageVersion } from "@plane/types";
// ui // ui
import { setToast, TOAST_TYPE } from "@plane/ui"; import { setToast, TOAST_TYPE } from "@plane/ui";
// components // components
@@ -14,21 +14,25 @@ import { useProjectPages } from "@/hooks/store";
import { useAppRouter } from "@/hooks/use-app-router"; import { useAppRouter } from "@/hooks/use-app-router";
import { usePageFallback } from "@/hooks/use-page-fallback"; import { usePageFallback } from "@/hooks/use-page-fallback";
import { useQueryParams } from "@/hooks/use-query-params"; import { useQueryParams } from "@/hooks/use-query-params";
// services
import { ProjectPageService, ProjectPageVersionService } from "@/services/page";
const projectPageService = new ProjectPageService();
const projectPageVersionService = new ProjectPageVersionService();
// store // store
import { IPage } from "@/store/pages/page"; import { IPage } from "@/store/pages/page";
type TPageRootProps = { type TPageRootProps = {
descriptionHandler: {
fetch: () => Promise<any>;
update: (data: TDocumentPayload) => Promise<void>;
};
page: IPage; page: IPage;
projectId: string; projectId: string;
versionHistoryHandler: {
fetchAll: (pageId: string) => Promise<TPageVersion[] | undefined>;
fetchDetails: (pageId: string, versionId: string) => Promise<TPageVersion | undefined>;
};
workspaceSlug: string; workspaceSlug: string;
}; };
export const PageRoot = observer((props: TPageRootProps) => { export const PageRoot = observer((props: TPageRootProps) => {
const { projectId, workspaceSlug, page } = props; const { descriptionHandler, page, projectId, versionHistoryHandler, workspaceSlug } = props;
// states // states
const [editorReady, setEditorReady] = useState(false); const [editorReady, setEditorReady] = useState(false);
const [hasConnectionFailed, setHasConnectionFailed] = useState(false); const [hasConnectionFailed, setHasConnectionFailed] = useState(false);
@@ -43,16 +47,13 @@ export const PageRoot = observer((props: TPageRootProps) => {
// store hooks // store hooks
const { createPage } = useProjectPages(); const { createPage } = useProjectPages();
// derived values // derived values
const { access, description_html, name, isContentEditable, updateDescription } = page; const { access, description_html, name, isContentEditable } = page;
// page fallback // page fallback
usePageFallback({ usePageFallback({
editorRef, editorRef,
fetchPageDescription: async () => { fetchPageDescription: async () => await descriptionHandler.fetch(),
if (!page.id) return;
return await projectPageService.fetchDescriptionBinary(workspaceSlug, projectId, page.id);
},
hasConnectionFailed, hasConnectionFailed,
updatePageDescription: async (data) => await updateDescription(data), updatePageDescription: async (data) => await descriptionHandler.update(data),
}); });
// update query params // update query params
const { updateQueryParams } = useQueryParams(); const { updateQueryParams } = useQueryParams();
@@ -105,23 +106,8 @@ export const PageRoot = observer((props: TPageRootProps) => {
activeVersion={version} activeVersion={version}
currentVersionDescription={currentVersionDescription ?? null} currentVersionDescription={currentVersionDescription ?? null}
editorComponent={PagesVersionEditor} editorComponent={PagesVersionEditor}
fetchAllVersions={async (pageId) => { fetchAllVersions={async (pageId) => await versionHistoryHandler.fetchAll(pageId)}
if (!workspaceSlug || !projectId) return; fetchVersionDetails={async (pageId, versionId) => await versionHistoryHandler.fetchDetails(pageId, versionId)}
return await projectPageVersionService.fetchAllVersions(
workspaceSlug.toString(),
projectId.toString(),
pageId
);
}}
fetchVersionDetails={async (pageId, versionId) => {
if (!workspaceSlug || !projectId) return;
return await projectPageVersionService.fetchVersionById(
workspaceSlug.toString(),
projectId.toString(),
pageId,
versionId
);
}}
handleRestore={handleRestoreVersion} handleRestore={handleRestoreVersion}
isOpen={isVersionsOverlayOpen} isOpen={isVersionsOverlayOpen}
onClose={handleCloseVersionsOverlay} onClose={handleCloseVersionsOverlay}