"use client";
import { useAuth } from "@/src/app/providers/auth-provider";
import {
useDocumentData,
useDocumentSave,
useDocumentActions,
useDocumentTemplates,
useDocumentUtils,
useDocumentHeadings,
useSidebarSearch
} from "@/features/document-edit/model";
import { Button } from "@/shared/ui/button";
import { Spinner } from "@/shared/ui/spinner";
import { RichTextEditor } from "@/widgets/editor/editor/core/rich-text-editor";
import { DocumentSidebar } from "@/widgets/editor/sidebar/document-sidebar";
import { ArrowLeft, Save, Clock, User, Eye, BookOpen, FileText, Calendar } from "lucide-react";
import { useState } from "react";
import { useRouter, useParams } from "next/navigation";
import { DocumentDetailSkeleton } from "@/shared/ui/skeleton";
const DocumentPage = () => {
const { user } = useAuth();
const router = useRouter();
const params = useParams();
const documentId = params.id as string;
// 1. 문서 데이터 관리
const {
document,
isLoading,
title,
setTitle,
content,
setContent,
availableDocuments,
updateDocument,
} = useDocumentData({ documentId });
// 2. 저장 기능
const {
saveDocument,
isSaving,
isAutoSaving,
lastSaved,
} = useDocumentSave({
documentId,
title,
content,
onSaveSuccess: updateDocument,
});
// 3. 문서 액션
const {
deleteDocument,
shareDocument,
unshareDocument,
isDeleting,
} = useDocumentActions({
documentId,
onPublishChange: (isPublished) => {
if (document) {
updateDocument({ ...document, isPublished });
}
},
});
// 4. 템플릿 기능
const {
createTemplate,
applyTemplate,
} = useDocumentTemplates({
onApply: (templateContent, templateTitle) => {
setContent(templateContent);
if (templateTitle && !title.trim()) {
setTitle(templateTitle);
}
},
});
// 5. 유틸리티
const { getWordCount, formatDate } = useDocumentUtils();
const [showWordCount, setShowWordCount] = useState(false);
if (isLoading) {
return
The document you're looking for doesn't exist or you don't have access to it.