@powerhousedao/codegen 4.1.0-dev.8 → 4.1.0-staging.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/index.d.ts +14 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/index.d.ts.map +1 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/index.js +12 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/index.js.map +1 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/resolvers.esm.t +17 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-custom-subgraph/schema.esm.t +16 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/object.esm.t +3 -3
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/ph-factories.esm.t +96 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/reducer.esm.t +3 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/types.esm.t +2 -2
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model/utils.esm.t +11 -10
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/customTest.esm.t +2 -2
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/error.esm.t +6 -10
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.d.ts +4 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.d.ts.map +1 -1
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js +13 -1
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-module/index.js.map +1 -1
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/resolvers.esm.t +59 -50
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-document-model-subgraph/schema.esm.t +3 -3
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/CreateDocument.esm.t +38 -24
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/DriveExplorer.esm.t +244 -181
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/EditorContainer.esm.t +53 -74
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FolderTree.esm.t +44 -26
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/editor.esm.t +22 -58
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.d.ts +16 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.d.ts.map +1 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.esm.t +2 -3
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.js +12 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/index.js.map +1 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.d.ts +2 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.d.ts.map +1 -1
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.esm.t +1 -1
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.js +1 -0
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-editor/index.js.map +1 -1
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/factory.esm.t +2 -1
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-analytics/lib.esm.t +7 -5
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/factory.esm.t +3 -2
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-processor-relationalDb/lib.esm.t +6 -5
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-subgraph/index.esm.t +0 -32
- package/dist/src/codegen/hygen.d.ts +6 -4
- package/dist/src/codegen/hygen.d.ts.map +1 -1
- package/dist/src/codegen/hygen.js +35 -8
- package/dist/src/codegen/hygen.js.map +1 -1
- package/dist/src/codegen/index.d.ts +5 -3
- package/dist/src/codegen/index.d.ts.map +1 -1
- package/dist/src/codegen/index.js +72 -5
- package/dist/src/codegen/index.js.map +1 -1
- package/dist/src/ts-morph-generator/core/GenerationContext.d.ts +8 -6
- package/dist/src/ts-morph-generator/core/GenerationContext.d.ts.map +1 -1
- package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.d.ts +1 -0
- package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.d.ts.map +1 -1
- package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.js +9 -7
- package/dist/src/ts-morph-generator/core/TSMorphCodeGenerator.js.map +1 -1
- package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.d.ts +3 -0
- package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.d.ts.map +1 -1
- package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.js +85 -14
- package/dist/src/ts-morph-generator/file-generators/ReducerGenerator.js.map +1 -1
- package/dist/tsconfig.hygen.tsbuildinfo +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +13 -6
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FileItemsGrid.esm.t +0 -44
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/components/FolderItemsGrid.esm.t +0 -96
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/hooks/useSelectedFolderChildren.esm.t +0 -35
- package/dist/src/codegen/.hygen/templates/powerhouse/generate-drive-editor/hooks/useTransformedNodes.esm.t +0 -35
|
@@ -2,49 +2,63 @@
|
|
|
2
2
|
to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/components/CreateDocument.tsx"
|
|
3
3
|
unless_exists: true
|
|
4
4
|
---
|
|
5
|
+
import {
|
|
6
|
+
addDocument,
|
|
7
|
+
useDocumentModelModules,
|
|
8
|
+
useSelectedDriveId,
|
|
9
|
+
useSelectedFolder,
|
|
10
|
+
type VetraDocumentModelModule,
|
|
11
|
+
} from "@powerhousedao/reactor-browser";
|
|
5
12
|
import { Button } from "@powerhousedao/design-system";
|
|
6
|
-
import { type DocumentModelModule } from "document-model";
|
|
7
13
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Document creation UI component.
|
|
16
|
+
* Displays available document types as clickable buttons.
|
|
17
|
+
*/
|
|
18
|
+
export const CreateDocument = () => {
|
|
19
|
+
const selectedDriveId = useSelectedDriveId();
|
|
20
|
+
const selectedFolder = useSelectedFolder();
|
|
21
|
+
const documentModelModules = useDocumentModelModules();
|
|
12
22
|
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
async function handleAddDocument(module: VetraDocumentModelModule) {
|
|
24
|
+
if (!selectedDriveId) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
await addDocument(
|
|
28
|
+
selectedDriveId,
|
|
29
|
+
`New ${module.documentModel.name} document`,
|
|
30
|
+
module.documentModel.id,
|
|
31
|
+
selectedFolder?.id,
|
|
32
|
+
);
|
|
16
33
|
}
|
|
17
34
|
|
|
18
|
-
return doc.documentModel;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const CreateDocument: React.FC<CreateDocumentProps> = ({
|
|
22
|
-
documentModels,
|
|
23
|
-
createDocument,
|
|
24
|
-
}) => {
|
|
25
35
|
return (
|
|
26
36
|
<div className="px-6">
|
|
37
|
+
{/* Customize section title here */}
|
|
27
38
|
<h3 className="mb-3 mt-4 text-sm font-bold text-gray-600">
|
|
28
39
|
New document
|
|
29
40
|
</h3>
|
|
41
|
+
{/* Customize layout by changing flex-wrap, gap, or grid layout */}
|
|
30
42
|
<div className="flex w-full flex-wrap gap-4">
|
|
31
|
-
{
|
|
32
|
-
const spec = getDocumentSpec(doc);
|
|
43
|
+
{documentModelModules?.map((documentModelModule) => {
|
|
33
44
|
return (
|
|
34
45
|
<Button
|
|
35
|
-
key={
|
|
36
|
-
color="light"
|
|
46
|
+
key={documentModelModule.documentModel.id}
|
|
47
|
+
color="light" // Customize button appearance
|
|
37
48
|
size="small"
|
|
38
49
|
className="cursor-pointer"
|
|
39
|
-
title={
|
|
40
|
-
aria-description={
|
|
41
|
-
onClick={() =>
|
|
50
|
+
title={documentModelModule.documentModel.name}
|
|
51
|
+
aria-description={documentModelModule.documentModel.description}
|
|
52
|
+
onClick={() => handleAddDocument(documentModelModule)}
|
|
42
53
|
>
|
|
43
|
-
|
|
54
|
+
{/* Customize document type display format */}
|
|
55
|
+
<span className="text-sm">
|
|
56
|
+
{documentModelModule.documentModel.name}
|
|
57
|
+
</span>
|
|
44
58
|
</Button>
|
|
45
59
|
);
|
|
46
60
|
})}
|
|
47
61
|
</div>
|
|
48
62
|
</div>
|
|
49
63
|
);
|
|
50
|
-
};
|
|
64
|
+
};
|
|
@@ -3,231 +3,294 @@ to: "<%= rootDir %>/<%= h.changeCase.param(name) %>/components/DriveExplorer.tsx
|
|
|
3
3
|
unless_exists: true
|
|
4
4
|
---
|
|
5
5
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
type UiNode,
|
|
6
|
+
Breadcrumbs,
|
|
7
|
+
CreateDocumentModal,
|
|
8
|
+
FileItem,
|
|
9
|
+
FolderItem,
|
|
10
|
+
useBreadcrumbs,
|
|
12
11
|
} from "@powerhousedao/design-system";
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
import {
|
|
13
|
+
addDocument,
|
|
14
|
+
type DriveEditorProps,
|
|
15
|
+
getSyncStatusSync,
|
|
16
|
+
setSelectedNode,
|
|
17
|
+
useAllFolderNodes,
|
|
18
|
+
useDocumentModelModules,
|
|
19
|
+
useDriveContext,
|
|
20
|
+
useDriveSharingType,
|
|
21
|
+
useEditorModules,
|
|
22
|
+
useFileChildNodes,
|
|
23
|
+
useFolderChildNodes,
|
|
24
|
+
useSelectedDrive,
|
|
25
|
+
useSelectedFolder,
|
|
26
|
+
useSelectedNodePath,
|
|
27
|
+
useUserPermissions,
|
|
28
|
+
} from "@powerhousedao/reactor-browser";
|
|
21
29
|
import type { DocumentModelModule } from "document-model";
|
|
22
|
-
import {
|
|
23
|
-
import { CreateDocument } from "./CreateDocument.
|
|
24
|
-
import {
|
|
25
|
-
|
|
26
|
-
interface DriveExplorerProps {
|
|
27
|
-
driveId: string;
|
|
28
|
-
nodes: Node[];
|
|
29
|
-
onAddFolder: (name: string, parentFolder?: string) => void;
|
|
30
|
-
onDeleteNode: (nodeId: string) => void;
|
|
31
|
-
renameNode: (nodeId: string, name: string) => void;
|
|
32
|
-
onCopyNode: (nodeId: string, targetName: string, parentId?: string) => void;
|
|
33
|
-
context: DriveEditorContext;
|
|
34
|
-
}
|
|
30
|
+
import { useCallback, useRef, useState } from "react";
|
|
31
|
+
import { CreateDocument } from "./CreateDocument.jsx";
|
|
32
|
+
import { EditorContainer } from "./EditorContainer.jsx";
|
|
33
|
+
import { FolderTree } from "./FolderTree.jsx";
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
context,
|
|
44
|
-
}: DriveExplorerProps) {
|
|
45
|
-
const { getDocumentRevision } = context;
|
|
46
|
-
|
|
47
|
-
const [selectedNodeId, setSelectedNodeId] = useState<string | undefined>();
|
|
35
|
+
/**
|
|
36
|
+
* Main drive explorer component with sidebar navigation and content area.
|
|
37
|
+
* Layout: Left sidebar (folder tree) + Right content area (files/folders + document editor)
|
|
38
|
+
*/
|
|
39
|
+
export function DriveExplorer(props: DriveEditorProps) {
|
|
40
|
+
// === DOCUMENT EDITOR STATE ===
|
|
41
|
+
// Customize document opening/closing behavior here
|
|
48
42
|
const [activeDocumentId, setActiveDocumentId] = useState<
|
|
49
43
|
string | undefined
|
|
50
44
|
>();
|
|
51
45
|
const [openModal, setOpenModal] = useState(false);
|
|
52
46
|
const selectedDocumentModel = useRef<DocumentModelModule | null>(null);
|
|
53
|
-
const
|
|
47
|
+
const editorModules = useEditorModules();
|
|
48
|
+
// === DRIVE CONTEXT HOOKS ===
|
|
49
|
+
// Core drive operations and document models
|
|
50
|
+
const {
|
|
51
|
+
onAddFile,
|
|
52
|
+
onAddFolder,
|
|
53
|
+
onCopyNode,
|
|
54
|
+
onDuplicateNode,
|
|
55
|
+
onMoveNode,
|
|
56
|
+
onRenameNode,
|
|
57
|
+
showDeleteNodeModal,
|
|
58
|
+
} = useDriveContext();
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
const { isAllowedToCreateDocuments } = useUserPermissions();
|
|
61
|
+
// === STATE MANAGEMENT HOOKS ===
|
|
62
|
+
// Core state hooks for drive navigation
|
|
63
|
+
const [selectedDrive] = useSelectedDrive(); // Currently selected drive
|
|
64
|
+
const selectedFolder = useSelectedFolder(); // Currently selected folder
|
|
65
|
+
const selectedNodePath = useSelectedNodePath();
|
|
66
|
+
const sharingType = useDriveSharingType(selectedDrive?.header.id);
|
|
59
67
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
);
|
|
68
|
+
// === NAVIGATION SETUP ===
|
|
69
|
+
// Breadcrumbs for folder navigation
|
|
70
|
+
const { breadcrumbs, onBreadcrumbSelected } = useBreadcrumbs({
|
|
71
|
+
selectedNodePath,
|
|
72
|
+
setSelectedNode,
|
|
73
|
+
});
|
|
66
74
|
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
);
|
|
75
|
+
const folderChildren = useFolderChildNodes();
|
|
76
|
+
const fileChildren = useFileChildNodes();
|
|
77
|
+
|
|
78
|
+
// All folders for the sidebar tree view
|
|
79
|
+
const allFolders = useAllFolderNodes();
|
|
73
80
|
|
|
74
|
-
|
|
75
|
-
console.log("Selected node:", node);
|
|
76
|
-
setSelectedNodeId(node.id);
|
|
77
|
-
}, []);
|
|
81
|
+
// === EVENT HANDLERS ===
|
|
78
82
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
// Handle folder creation with optional name parameter
|
|
84
|
+
const handleCreateFolder = useCallback(
|
|
85
|
+
async (folderName?: string) => {
|
|
86
|
+
let name: string | undefined = folderName;
|
|
82
87
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
// If no name provided, prompt for it (for manual folder creation)
|
|
89
|
+
if (!name) {
|
|
90
|
+
const promptResult = prompt("Enter folder name:");
|
|
91
|
+
name = promptResult || undefined;
|
|
92
|
+
}
|
|
86
93
|
|
|
94
|
+
if (name?.trim()) {
|
|
95
|
+
try {
|
|
96
|
+
await onAddFolder(name.trim(), selectedFolder);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
console.error("Failed to create folder:", error);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
[onAddFolder, selectedFolder],
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
// Handle document creation from modal
|
|
87
106
|
const onCreateDocument = useCallback(
|
|
88
107
|
async (fileName: string) => {
|
|
89
108
|
setOpenModal(false);
|
|
90
109
|
|
|
91
110
|
const documentModel = selectedDocumentModel.current;
|
|
92
|
-
if (!documentModel) return;
|
|
111
|
+
if (!documentModel || !selectedDrive?.header.id) return;
|
|
93
112
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
113
|
+
try {
|
|
114
|
+
const node = await addDocument(
|
|
115
|
+
selectedDrive.header.id,
|
|
116
|
+
fileName,
|
|
117
|
+
documentModel.documentModel.id,
|
|
118
|
+
selectedFolder?.id,
|
|
119
|
+
);
|
|
100
120
|
|
|
101
|
-
|
|
102
|
-
setActiveDocumentId(node.id);
|
|
103
|
-
},
|
|
104
|
-
[addDocument, driveId, selectedNodeId]
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
const onSelectDocumentModel = useCallback(
|
|
108
|
-
(documentModel: DocumentModelModule) => {
|
|
109
|
-
selectedDocumentModel.current = documentModel;
|
|
110
|
-
setOpenModal(true);
|
|
111
|
-
},
|
|
112
|
-
[]
|
|
113
|
-
);
|
|
121
|
+
selectedDocumentModel.current = null;
|
|
114
122
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
if (node) {
|
|
124
|
+
// Customize: Auto-open created document by uncommenting below
|
|
125
|
+
// setActiveDocumentId(node.id);
|
|
126
|
+
}
|
|
127
|
+
} catch (error) {
|
|
128
|
+
console.error("Failed to create document:", error);
|
|
129
|
+
}
|
|
119
130
|
},
|
|
120
|
-
[
|
|
131
|
+
[addDocument, editorModules, selectedDrive?.header.id, selectedFolder?.id],
|
|
121
132
|
);
|
|
122
133
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const transformedNodes = useTransformedNodes(nodes, driveId);
|
|
127
|
-
|
|
128
|
-
// Separate folders and files
|
|
129
|
-
const folders = transformedNodes.filter(
|
|
130
|
-
(node): node is UiFolderNode => node.kind === "FOLDER"
|
|
131
|
-
);
|
|
132
|
-
const files = transformedNodes.filter(
|
|
133
|
-
(node): node is UiFileNode => node.kind === "FILE"
|
|
134
|
-
);
|
|
135
|
-
|
|
136
|
-
// Get children of selected folder using the custom hook
|
|
137
|
-
const selectedFolderChildren = useSelectedFolderChildren(
|
|
138
|
-
selectedNodeId,
|
|
139
|
-
folders,
|
|
140
|
-
files
|
|
141
|
-
);
|
|
134
|
+
// === DOCUMENT EDITOR DATA ===
|
|
135
|
+
// Filter available document types here if needed
|
|
136
|
+
const documentModelModules = useDocumentModelModules();
|
|
142
137
|
|
|
143
|
-
// Get
|
|
138
|
+
// Get active document and its editor components
|
|
144
139
|
const activeDocument = activeDocumentId
|
|
145
|
-
?
|
|
140
|
+
? fileChildren.find((file) => file.id === activeDocumentId)
|
|
146
141
|
: undefined;
|
|
147
142
|
|
|
148
143
|
const documentModelModule = activeDocument
|
|
149
|
-
?
|
|
144
|
+
? documentModelModules?.find(
|
|
145
|
+
(m) => m.documentModel.id === activeDocument.documentType,
|
|
146
|
+
)
|
|
150
147
|
: null;
|
|
151
148
|
|
|
152
149
|
const editorModule = activeDocument
|
|
153
|
-
?
|
|
150
|
+
? editorModules?.find((e) =>
|
|
151
|
+
e.documentTypes.includes(activeDocument.documentType),
|
|
152
|
+
)
|
|
154
153
|
: null;
|
|
155
154
|
|
|
155
|
+
// === RENDER ===
|
|
156
156
|
return (
|
|
157
157
|
<div className="flex h-full">
|
|
158
|
-
{/*
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
{/* === LEFT SIDEBAR: Folder Navigation === */}
|
|
159
|
+
{/* Customize sidebar width by changing w-64 */}
|
|
160
|
+
<div className="w-64 overflow-y-auto border-r border-gray-200 bg-white">
|
|
161
|
+
<div className="p-4">
|
|
162
|
+
{/* Customize sidebar title here */}
|
|
163
|
+
<h2 className="mb-4 text-lg font-semibold text-gray-700">
|
|
164
|
+
Drive Explorer
|
|
165
|
+
</h2>
|
|
166
|
+
|
|
167
|
+
{/* Folder tree navigation component */}
|
|
168
|
+
<FolderTree folders={allFolders} onSelectNode={setSelectedNode} />
|
|
169
|
+
</div>
|
|
166
170
|
</div>
|
|
167
171
|
|
|
168
|
-
{/*
|
|
169
|
-
<div className="flex-1
|
|
172
|
+
{/* === RIGHT CONTENT AREA: Files/Folders or Document Editor === */}
|
|
173
|
+
<div className="flex-1 overflow-y-auto p-4">
|
|
174
|
+
{/* Conditional rendering: Document editor or folder contents */}
|
|
170
175
|
{activeDocument && documentModelModule && editorModule ? (
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
...context,
|
|
174
|
-
getDocumentRevision: onGetDocumentRevision,
|
|
175
|
-
}}
|
|
176
|
-
documentId={activeDocumentId!}
|
|
177
|
-
documentType={activeDocument.documentType}
|
|
178
|
-
driveId={driveId}
|
|
179
|
-
onClose={handleEditorClose}
|
|
180
|
-
title={activeDocument.name}
|
|
181
|
-
documentModelModule={documentModelModule}
|
|
182
|
-
editorModule={editorModule}
|
|
183
|
-
/>
|
|
176
|
+
// Document editor view
|
|
177
|
+
<EditorContainer handleClose={() => setActiveDocumentId(undefined)} />
|
|
184
178
|
) : (
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
{/*
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
179
|
+
/* Folder contents view */
|
|
180
|
+
<div className="space-y-6">
|
|
181
|
+
{/* === HEADER SECTION === */}
|
|
182
|
+
<div className="space-y-3">
|
|
183
|
+
<div className="flex items-center justify-between">
|
|
184
|
+
{/* Folder title */}
|
|
185
|
+
<h2 className="text-lg font-semibold">
|
|
186
|
+
{selectedFolder
|
|
187
|
+
? `Contents of "${selectedFolder.name}"`
|
|
188
|
+
: "Root Contents"}
|
|
189
|
+
</h2>
|
|
190
|
+
{/* Customize: Add more action buttons here */}
|
|
191
|
+
{isAllowedToCreateDocuments && (
|
|
192
|
+
<button
|
|
193
|
+
onClick={() => handleCreateFolder()}
|
|
194
|
+
className="rounded bg-blue-500 px-3 py-1 text-sm text-white hover:bg-blue-600"
|
|
195
|
+
>
|
|
196
|
+
+ New Folder
|
|
197
|
+
</button>
|
|
198
|
+
)}
|
|
199
|
+
</div>
|
|
200
|
+
|
|
201
|
+
{/* Navigation breadcrumbs */}
|
|
202
|
+
{breadcrumbs.length > 1 && (
|
|
203
|
+
<div className="border-b border-gray-200 pb-3">
|
|
204
|
+
<Breadcrumbs
|
|
205
|
+
breadcrumbs={breadcrumbs}
|
|
206
|
+
createEnabled={isAllowedToCreateDocuments}
|
|
207
|
+
onCreate={handleCreateFolder}
|
|
208
|
+
onBreadcrumbSelected={onBreadcrumbSelected}
|
|
209
|
+
/>
|
|
210
|
+
</div>
|
|
211
|
+
)}
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
{/* === FOLDERS SECTION === */}
|
|
215
|
+
{/* Customize grid layout by changing grid-cols-1 */}
|
|
216
|
+
{folderChildren.length > 0 && (
|
|
217
|
+
<div>
|
|
218
|
+
<h3 className="mb-2 text-sm font-medium text-gray-500">
|
|
219
|
+
📁 Folders
|
|
220
|
+
</h3>
|
|
221
|
+
<div className="grid grid-cols-1 gap-2">
|
|
222
|
+
{folderChildren.map((folderNode) => (
|
|
223
|
+
<FolderItem
|
|
224
|
+
key={folderNode.id}
|
|
225
|
+
folderNode={folderNode}
|
|
226
|
+
isAllowedToCreateDocuments={isAllowedToCreateDocuments}
|
|
227
|
+
sharingType={sharingType || "LOCAL"}
|
|
228
|
+
getSyncStatusSync={getSyncStatusSync}
|
|
229
|
+
setSelectedNode={setSelectedNode}
|
|
230
|
+
onAddFile={onAddFile}
|
|
231
|
+
onCopyNode={onCopyNode}
|
|
232
|
+
onMoveNode={onMoveNode}
|
|
233
|
+
onRenameNode={onRenameNode}
|
|
234
|
+
onDuplicateNode={onDuplicateNode}
|
|
235
|
+
onAddFolder={onAddFolder}
|
|
236
|
+
onAddAndSelectNewFolder={handleCreateFolder}
|
|
237
|
+
showDeleteNodeModal={showDeleteNodeModal}
|
|
238
|
+
/>
|
|
239
|
+
))}
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
)}
|
|
243
|
+
|
|
244
|
+
{/* === FILES/DOCUMENTS SECTION === */}
|
|
245
|
+
{/* Customize grid layout by changing grid-cols-1 */}
|
|
246
|
+
{fileChildren.length > 0 && (
|
|
247
|
+
<div>
|
|
248
|
+
<h3 className="mb-2 text-sm font-medium text-gray-500">
|
|
249
|
+
📄 Documents
|
|
250
|
+
</h3>
|
|
251
|
+
<div className="grid grid-cols-1 gap-2">
|
|
252
|
+
{fileChildren.map((fileNode) => (
|
|
253
|
+
<FileItem
|
|
254
|
+
key={fileNode.id}
|
|
255
|
+
fileNode={fileNode}
|
|
256
|
+
isAllowedToCreateDocuments={isAllowedToCreateDocuments}
|
|
257
|
+
sharingType={sharingType || "LOCAL"}
|
|
258
|
+
getSyncStatusSync={getSyncStatusSync}
|
|
259
|
+
setSelectedNode={setSelectedNode}
|
|
260
|
+
showDeleteNodeModal={showDeleteNodeModal}
|
|
261
|
+
onRenameNode={onRenameNode}
|
|
262
|
+
onDuplicateNode={onDuplicateNode}
|
|
263
|
+
onAddFile={onAddFile}
|
|
264
|
+
onCopyNode={onCopyNode}
|
|
265
|
+
onMoveNode={onMoveNode}
|
|
266
|
+
onAddFolder={onAddFolder}
|
|
267
|
+
onAddAndSelectNewFolder={handleCreateFolder}
|
|
268
|
+
/>
|
|
269
|
+
))}
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
)}
|
|
273
|
+
|
|
274
|
+
{/* === EMPTY STATE === */}
|
|
275
|
+
{/* Customize empty state message and styling here */}
|
|
276
|
+
{folderChildren.length === 0 && fileChildren.length === 0 && (
|
|
277
|
+
<div className="py-12 text-center text-gray-500">
|
|
278
|
+
<p className="text-lg">📁 This folder is empty</p>
|
|
279
|
+
<p className="mt-2 text-sm">
|
|
280
|
+
Create your first document or folder below
|
|
281
|
+
</p>
|
|
282
|
+
</div>
|
|
283
|
+
)}
|
|
284
|
+
|
|
285
|
+
{/* === DOCUMENT CREATION SECTION === */}
|
|
286
|
+
{/* Component for creating new documents */}
|
|
287
|
+
<CreateDocument />
|
|
288
|
+
</div>
|
|
227
289
|
)}
|
|
228
290
|
</div>
|
|
229
291
|
|
|
230
|
-
{/*
|
|
292
|
+
{/* === DOCUMENT CREATION MODAL === */}
|
|
293
|
+
{/* Modal for entering document name after selecting type */}
|
|
231
294
|
<CreateDocumentModal
|
|
232
295
|
onContinue={onCreateDocument}
|
|
233
296
|
onOpenChange={(open) => setOpenModal(open)}
|
|
@@ -235,4 +298,4 @@ export function DriveExplorer({
|
|
|
235
298
|
/>
|
|
236
299
|
</div>
|
|
237
300
|
);
|
|
238
|
-
}
|
|
301
|
+
}
|